无法单击 Selenium 和 Java 的树视图
Posted
技术标签:
【中文标题】无法单击 Selenium 和 Java 的树视图【英文标题】:Can't click on a treeview with Selenium and Java 【发布时间】:2022-01-21 04:49:57 【问题描述】:我基本上是自动化测试的新手,一直在使用 JAVA+SELENIUM、Eclipse。
一直在尝试使用 geckodriver.exe Webdriver 打开“欧洲”树。一直在寻找解决方案,但无济于事。
这是需要测试的页面。 https://js.devexpress.com/Demos/WidgetsGallery/Demo/Common/NavigationOverview/Angular/Light/
我的打开树的代码。
public class Test_suite
@Test
public void testAssertFunctions() throws InterruptedException
System.setProperty("webdriver.firefox.driver", "C:\\selenium-3.141.59\\draiveri\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://js.devexpress.com/Demos/WidgetsGallery/Demo/Common/NavigationOverview/Angular/Light/");
Thread.sleep(10000);
WebElement fruits = driver.findElement(By.xpath("/html/body/div/demo-app/div/div[1]/dx-tree-view/div[2]/div/div/div[1]/ul/li[4]/div[2]"));
fruits.click();
我似乎找不到该元素,尝试了多个findElement.by
选项,但无济于事。唯一可行的解决方案是使用 Selenium IDE,它单击以展开树,并显示 xpath=//li[4]/div[2]
,但将该路径复制到 eclipse 后,仍然找不到元素。
【问题讨论】:
【参考方案1】:请试试这个:
public class Test_suite
@Test
public void testAssertFunctions() throws InterruptedException
System.setProperty("webdriver.firefox.driver", "C:\\selenium-
3.141.59\\draiveri\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://js.devexpress.com/Demos/WidgetsGallery/Demo/Common/NavigationOverview/Angular/Light/");
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//iframe[@id='demoFrame']")));
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@id='demoFrame']")));
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[text()='Europe']"))).click();
【讨论】:
试过这个解决方案,但现在我得到了 timeoutException,我什至将等待更改为 30,但它就是找不到那个元素。原因:org.openqa.selenium.NoSuchElementException:无法定位元素://span[text()='Europe'] 对不起。该元素位于 iframe 内。因此,您必须先切换到该 iframe 才能访问此元素。请参阅我的更新答案。 更新版本有效,但作为上面的答案,如果单击欧洲按钮,则需要双击才能打开树。有没有办法触发三角展开按钮,那么就一键搞定。【参考方案2】:有几点:
使用Selenium v3.x 以后,使用GeckoDriver 是强制性的,所以不要:
webdriver.firefox.driver
我们需要使用:
webdriver.gecko.driver
您需要使用相对xpath,而不是绝对xpath。
所需的WebElement 也在iframe 内
理想情况下,在任何可点击元素上click(),您需要为elementToBeClickable()
诱导WebDriverWait,您可以使用以下Locator Strategy。
您的有效代码块将是:
@Test
public void testAssertFunctions() throws InterruptedException
System.setProperty("webdriver.gecko.driver", "C:\\selenium-3.141.59\\draiveri\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.navigate().to("https://js.devexpress.com/Demos/WidgetsGallery/Demo/Common/NavigationOverview/Angular/Light/");
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[@class='demo-frame' and @name='demo-frame']")));
WebElement element = new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[text()='Europe']")));
new Actions(driver).moveToElement(element).doubleClick(element).build().perform();
【讨论】:
@class= 后面要写什么? @PēterisSpura 查看更新的答案并告诉我状态。 测试通过了,虽然我没有看到打开树所需的点击,但它仍然没有打开。 我认为这里的问题是点击的是欧洲按钮,而不是树扩展按钮。我可以尝试双击,然后它应该会打开。 @PēterisSpura 查看更新的答案并告诉我状态以上是关于无法单击 Selenium 和 Java 的树视图的主要内容,如果未能解决你的问题,请参考以下文章
消息:尝试通过 Selenium 单击下拉菜单中的选项时,元素 <option> 无法滚动到视图中
单击图像时“元素无法单击”-Selenium WebDriver Java [重复]
无法使用Selenium Java脚本在模式对话框中单击项目