我正在尝试在测试脚本中的每个Web元素之前添加显式等待
我的代码有
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;
.
.
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(presenceOfElementLocated(By.id("name")));
driver.findElement(By.id("name")).clear();
driver.findElement(By.id("name")).sendKeys("Create_title_01");
我看到的错误是:
java.lang.NullPointerException
at org.openqa.selenium.support.ui.FluentWait$1.apply(FluentWait.java:176)
at org.openqa.selenium.support.ui.FluentWait$1.apply(FluentWait.java:1)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:201)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:174)
由于
答案 0 :(得分:5)
使用 presenceOfElementLocated 和其他AjaxCondition方法
你应该使用
org.openqa.selenium.support.ui.ExpectedConditions
类。你的代码应该是这样的:
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("name")));
答案 1 :(得分:0)
我建议使用waitForElementPresent或waitForElementNotPresent,具体取决于您的AJAX调用事件。
但是,如果您仍然喜欢使用wait.until,我就是这样做的(并且有效)
wait = new WebDriverWait(wedriver1, TimeSpan.FromSeconds(5));
.....
button.Click();
wait.Until(webdriver1 => webdriver2.webelement.GetAttribute("style").Contains("display: block"));
我在Until方法采用的条件下给出了属性更改的示例。你可以做点什么..
driver.findElement(By.id(“name”))。显示(对于wait.until中的条件。
答案 2 :(得分:0)
在WebDriverWait wait
初始化后,您似乎需要以下一行:
wait.ignoring(NoSuchElementException.class);