Jam*_*unn 21 selenium selenium-webdriver
我目前正在通过执行以下操作来检查WebElement是否过时:
public static boolean isStale(WebElement element) {
try {
element.click();
return false;
} catch (StaleElementReferenceException sere) {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
这与此问题提供的解决方案相同:
但是,这对我来说似乎相当混乱.有没有更简洁的方法,我可以检查元素是否陈旧,而不必抛出并捕获异常?
(另外,作为一方,如果我必须坚持抛出并捕获异常,还有什么比单击/发送键/悬停以抛出异常更好吗?我可能有一个我不想做的WebElement任何这些行动,因为它可能无意中影响其他事情.)
Mar*_*lle 25
Webdriver本身也使用try/catch-construction来检查陈旧性.
来自org.openqa.selenium.support.ui.ExpectedConditions.java:
public static ExpectedCondition<Boolean> stalenessOf(final WebElement element) {
return new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver ignored) {
try {
// Calling any method forces a staleness check
element.isEnabled();
return false;
} catch (StaleElementReferenceException expected) {
return true;
}
}
@Override
public String toString() {
return String.format("element (%s) to become stale", element);
}
};
}
Run Code Online (Sandbox Code Playgroud)
isEnabled()检查比使用单击操作更好 - 单击元素可能会导致不必要的副作用,您只想检查元素的状态.
Jef*_*ffC 11
我知道这已经有了一个已接受的答案,我不知道你如何使用陈旧性检查的更大背景,但也许这将有助于你或其他人.你可以ExpectedConditions.stalenessOf(WebElement)为你做的工作.例如,
WebElement pageElement = driver.findElement(By.id("someId"));
WebDriverWait wait = new WebDriverWait(webDriver, 10);
// do something that changes state of pageElement
wait.until(ExpectedConditions.stalenessOf(pageElement));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您不必执行pageElement.click()等操作来触发检查.
从文档中,.stalenessOf()等待元素不再附加到DOM.
参考文献:ExpectedConditions
| 归档时间: |
|
| 查看次数: |
24467 次 |
| 最近记录: |