gpt4 book ai didi

selenium - 检查 WebElement 是否已过时而不处理异常

转载 作者:行者123 更新时间:2023-12-03 04:54:57 27 4
gpt4 key购买 nike

我当前正在通过执行以下操作来检查 WebElement 是否已过时:

public static boolean isStale(WebElement element) {
try {
element.click();
return false;
} catch (StaleElementReferenceException sere) {
return true;
}
}

这与针对此问题提供的解决方案相同:

Check for a stale element using selenium 2?

但是,这对我来说似乎相当困惑。有没有一种更干净的方法可以检查元素是否过时,而不必抛出和捕获异常?

(另外,如果我必须坚持抛出和捕获异常,有什么比单击/发送键/悬停来抛出所述异常更好的事情吗?我可能有一个我没有的 WebElement想要执行任何这些操作,因为它可能会无意中影响其他操作。)

最佳答案

Webdriver 本身也使用 try/catch 结构来检查是否过时。

来自 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);
}
};
}

isEnabled() 检查比使用单击操作更好 - 单击元素可能会导致不需要的副作用,而您只想检查元素的状态。

关于selenium - 检查 WebElement 是否已过时而不处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25415849/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com