gpt4 book ai didi

java - 如何使用 Selenium Webdriver 等待元素不可点击?

转载 作者:行者123 更新时间:2023-11-30 08:27:43 24 4
gpt4 key购买 nike

我必须编写一个测试来验证某个元素在某些情况下是否不可点击。我正在使用 Selenium Webdriver Java 库。

我知道如何利用 WebDriverWaitExpectedConditions 类做相反的事情。

 new WebDriverWait(element, TIMEOUT).until(ExpectedConditions
.elementToBeClickable(By.cssSelector(LOCATOR)));

但我似乎无法找到一种方法来检查相反的事情。

我已经阅读了 WebElement 的文档,并设法将问题分解为两个更简单的案例。

  1. 该元素被禁用 - 在这种情况下,我可以只使用 WebElement#isEnabled 并将其包装在传递给 WebDriverWait#until 的谓词中。

    new WebDriverWait(driver, TIMEOUT).until(new Predicate<WebDriver>(){
    public boolean apply(WebDriver driver) {
    return !getElement().isEnabled();
    }
    });
  2. 在某些情况下,元素不会在点击时执行任何操作。我也想考虑到这一点。问题是,元素本身并没有被禁用。它可以被点击,但没有注册事件(通常有一个,但在我的例子中,它被 JavaScript 删除)。

第二种情况仍然困扰着我。有什么方法可以等待取消注册这样的事件吗?

最佳答案

您针对案例 1 的解决方案似乎应该可行。

对于情况 2,您可能需要从 Selenium 中调用页面上的 JavaScript 以检查该元素是否分配了任何事件处理程序,我相信以下应该可以解决问题:

new WebDriverWait(driver, TIMEOUT).until(new Predicate<WebDriver>() {
public boolean apply(WebDriver driver) {
return (JavascriptExectutor) driver.executeScript(
"arguments[0].onclick == null;", getElement());
}
});

这应该让 JS 查询分配给从方法 getElement() 传递到 JavascriptExecutor 的元素的当前 onClick 事件处理程序,并且如果没有分配处理程序,则返回 true。

除了快速摆弄 JS 之外,没有实际测试过它,但它应该一切都很好。

更新:在较新的 selenium 版本中,您应该能够使用:

ExpectedConditions.not(ExpectedConditions.elementToBeClickab‌​le(By))

关于java - 如何使用 Selenium Webdriver 等待元素不可点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20699922/

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