显式等待不适用于Firefox(52.4.0(64位))以下是我的代码:
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver", "C:\\Drivers\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://XXXX/XXXXX/XX/login");
driver.findElement(By.id("userId")).sendKeys("XXXXX");
driver.findElement(By.id("password")).sendKeys("XXXXX");
driver.findElement(By.id("submit")).click();
WebDriverWait wait = new WebDriverWait(driver, 50);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//span[text()='Viewer']")));
driver.findElement(By.xpath("//span[text()='Viewer']")).click();
}
我必须在任何情况下使用Explicit wait,因为元素不会在固定时间内加载。我在谷歌搜索了很多,但没有找到适合我的代码。
答案 0 :(得分:2)
根据您的代码尝试,您似乎在等待 WebElement
到 Explicit Wait
,然后尝试调用 {{ 1}} 方法。在您的代码中,您使用了 click()
条款与 presenceOfElementLocated
,根据documentation并未确认是否 ExpectedConditions
也是 WebElement
和 Displayed
。
更好的解决方案是修改 Enabled
的条款而不是 ExpectedConditions
我们必须使用 {{1 如下:
presenceOfElementLocated
答案 1 :(得分:1)
答案 2 :(得分:1)
根据@DebanjanB,我只是使用presenceOfElementLocated
不是一个好主意,而是使用elementToBeClickable
总是更好,所以正确的代码应该是:
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver", "C:\\Drivers\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://XXXX/XXXXX/XX/login");
driver.findElement(By.id("userId")).sendKeys("XXXXX");
driver.findElement(By.id("password")).sendKeys("XXXXX");
driver.findElement(By.id("submit")).click();
WebDriverWait wait = new WebDriverWait(driver, 50);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//span[text()='Viewer']")));
driver.findElement(By.xpath("//span[text()='Viewer']")).click();
}