我正在使用Java和Selenium编写测试,我使用下面的代码进入Chrome:设置
driverChrome.manage().window().maximize();
driverChrome.get("chrome://settings");
但是当页面打开时我找不到任何网页元素,例如当我尝试通过此代码找到“显示高级设置....”时
driverChrome.findElement(By.xpath("//a[@id='advanced-settings-expander']")).click();
它抛出一个错误,说“没有这样的元素:无法找到元素” 我试图找到其他元素,但它们都失败了。我在这里看到了this,但没有帮助。
找到以下代码:
driverChrome.manage().window().maximize();
driverChrome.get("chrome://settings");
Thread.sleep(5000);
WebElement w = driverChrome.findElement(By
.xpath("//iframe[@name='settings']"));
driverChrome = driverChrome.switchTo().frame(w);
Thread.sleep(1000);
while (true) {
try {
WebElement we = w.findElement(By
.xpath("//a[text()='Show advanced settings...']"));
if (we.isDisplayed()) {
we.click();
Thread.sleep(1000);
break;
}
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println("=========================");
}
}
答案 0 :(得分:1)
我还没有对此进行过测试,但是我把你的代码片段清理干净了一下。试试这个,看它是否有效。这应该非常接近。
切换到IFRAME上下文后,您不需要像IFRAME
那样引用w.findElement()
。
一般来说,Thread.sleep()
不是一个好习惯。您最好将WebDriverWait
与ExpectedConditions
一起使用。检查文档,了解您可以等待使用ExpectedConditions
的所有不同内容。我在下面的代码中使用了.elementToBeClickable()
。这是完美的,因为您想要单击一个元素。 .until()
返回等待的元素,因此您只需在语句的末尾附加.click()
...或者您可以将该元素存储在WebElement
变量中并在其他地方使用它。 / p>
driverChrome.manage().window().maximize();
driverChrome.get("chrome://settings");
WebElement w = driverChrome.findElement(By.xpath("//iframe[@name='settings']"));
driverChrome = driverChrome.switchTo().frame(w);
WebDriverWait wait = new WebDriverWait(driverChrome, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[text()='Show advanced settings...']"))).click();
// alternative example... store returned element and then click on a separate line... or use the variable elsewhere, etc.
// WebElement link = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[text()='Show advanced settings...']")));
// link.click();