这是我尝试过的,但没有成功,
不确定我哪里出错了?
if (("xxx").equals(messageStatus)) {
FluentWait<WebDriver> wait = new FluentWait<WebDriver> (driver)
.withTimeout(90, TimeUnit.SECONDS)
.pollingEvery(500, TimeUnit.MILLISECONDS)
.ignoring(NoSuchElementException.class);
wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver webDriver) {
String messageStatus =
MessageLogPage.messageStatus.getText();
if (messageStatus.equals("yyy")){
MessageLogPage.receivedPresentation.click();
}
return null;
}
});
非常感谢任何帮助/建议。提前致谢!
最佳答案
我认为问题可能是,如果您的页面真正刷新,则对 MessageLogPage.messageStatus
的旧引用将变得无效。 IE。不仅 messageStatus 文本发生变化,元素实例本身也会发生变化。
因此,我会更改算法,以便每次在获取其文本之前获取该元素。另外,您不应该单击“等待”内,请在以下时间后执行:
wait.until(new ExpectedCondition<WebElement>() {
@Override public WebElement apply(WebDriver webDriver) {
try {
WebElement element = webDriver.findElement(By.<...>); // however you can locate MessageLogPage.messageStatus
if(element.getText().equals("yyy")) {
return element;
}
}
catch(Exception e) { } // keep going (retun null)
return null;
});
wait.until
将多次调用此函数,直到返回值不为 null 或超时,在这种情况下会抛出异常。因此,wait.until
之后的下一行可以是单击:
wait.until(...); // above code
MessageLogPage.receivedPresentation.click(); // we are here only if wait.until did not throw the exception
尽管如果页面刷新,MessageLogPage.receivedPresentation
也可能无效。
您甚至可以通过返回 Boolean
来进一步简化它,因为您在找到该元素后并不真正关心它:
wait.until(new ExpectedCondition<Boolean>() {
@Override public Boolean apply(WebDriver webDriver) {
try {
WebElement element = webDriver.findElement(By.<...>); // however you can locate MessageLogPage.messageStatus
return element.getText().equals("yyy");
}
catch(Exception e) { } // keep going (return false)
return false;
});
关于java - 使用 selenium wait 刷新页面后,当 webelement 的状态从初始值 "xxx"更改为更改值 "yyy"时,如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37902281/