【问题标题】:How to wait for an element NOT to be clickable using Selenium Webdriver?如何使用 Selenium Webdriver 等待元素不可点击?
【发布时间】:2013-12-20 09:08:33
【问题描述】:

我必须编写一个测试来验证某个元素在某些情况下是否不可点击。我正在使用 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 删除了)。

第二种情况仍然困扰着我。有什么办法可以等待此类事件被取消注册?

【问题讨论】:

    标签: java selenium-webdriver clickable


    【解决方案1】:

    您对案例 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))
    

    【讨论】:

    • 谢谢,我会在圣诞节休息后回去工作时试试这个。显式演员看起来有点可疑,但它可能会被摆脱,我会看看我能做些什么。再次感谢,节日快乐;)
    • 我很确定 Selenium 上的 JS 执行器就是这样工作的,但是很可能是错误的 - 如果您确实找到了摆脱它的方法,我会很高兴听到它!顺便说一句,您对这个答案有什么运气吗?
    • 我最终使用JavaScriptExecutor 来检查前端设置的特定值。谢谢。
    • 显然你可以做ExpectedConditions.not(ExpectedConditions.elementToBeClickable(By))
    • 很确定在撰写本文时不支持。将更新答案以包含此内容。
    猜你喜欢
    • 2012-03-26
    • 2018-02-19
    • 2020-02-23
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2019-10-16
    相关资源
    最近更新 更多