2

我正在尝试在测试脚本中的每个 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)

谢谢

4

3 回答 3

5

用于使用presentOfElementLocated和其他 AjaxCondition 方法

你应该使用

org.openqa.selenium.support.ui.ExpectedConditions

班级。你的代码应该是这样的:

wait.until(ExpectedConditions.presenceOfElementLocated(By.id("name")));
于 2012-05-07T15:07:20.370 回答
0

我建议根据您的 AJAX 调用事件使用 waitForElementPresent 或 waitForElementNotPresent。

但是,如果您仍然喜欢使用 wait.until,这就是我的做法(并且有效)

wait = new WebDriverWait(wedriver1, TimeSpan.FromSeconds(5));
.....
button.Click();
wait.Until(webdriver1 => webdriver2.webelement.GetAttribute("style").Contains("display: block"));

我举了一个在直到方法采用的条件下属性更改的示例。你可以做类似..

driver.findElement(By.id("name")).displayed (对于您在 wait.until 中的情况。

于 2012-05-07T00:19:34.187 回答
0

WebDriverWait wait初始化后看起来您需要以下行:

wait.ignoring(NoSuchElementException.class);
于 2014-01-22T14:08:24.620 回答