【问题标题】:Check whether element is clickable in selenium检查元素在硒中是否可点击
【发布时间】:2015-01-12 15:53:48
【问题描述】:

我能够验证一个元素是否存在以及它是否被显示,但似乎无法找到一种方法来查看它是否“可点击”(不是说禁用)。

问题是,通常在填写网络表单时,我想要的元素在加载时可能会被 div 覆盖。 div 本身很难检测,因为它的 id、name 甚至 css 都很灵活。因此,我试图检测输入字段是否可以“点击”或“填充”。当覆盖 div 存在时,该字段不能由普通用户填充(因为 div 会覆盖输入字段并且不允许用户填充它)但它可以由 selenium 填充。我想防止这种情况发生,并且只允许 selenium 填充它,一旦用户也可以填充它。

【问题讨论】:

    标签: python html selenium selenium-webdriver


    【解决方案1】:

    在对输入字段执行任何操作之前,您可以使用webElement.isEnabled()webElement.isDisplayed() 方法...

    希望这能解决你的问题...

    否则,您还可以循环检查上述两个条件,如果这些条件为真,您可以指定输入文本,然后再次找到相同的元素,您可以获取 web 元素的文本并将该文本与您输入的文字。如果这些匹配,您可以退出循环。

    【讨论】:

      【解决方案2】:

      单击我一直使用的(对于 selenium)无法访问的元素:

      public void clickElement(WebElement el) throws InterruptedException {
          ((JavascriptExecutor) driver).executeScript("arguments[0].click();", el);
      }
      

      【讨论】:

        【解决方案3】:

        你可以wait for the element to be clickable:

        from selenium import webdriver
        from selenium.webdriver.common.by import By
        from selenium.webdriver.support.ui import WebDriverWait
        from selenium.webdriver.support import expected_conditions as EC
        
        driver = webdriver.Firefox()
        driver.get("http://somedomain")
        
        element = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.ID, "myDynamicElement"))
        )
        

        或者,您可以关注EAFP principle 并捕获click() 引发的异常:

        from selenium.common.exceptions import WebDriverException
        
        try:
            element.click()
        except WebDriverException:
            print "Element is not clickable"
        

        【讨论】:

        • 似乎以上都不起作用。白色覆盖仍然存在, element_to_be_clickable 等待仍然允许它通过。当我尝试单击不可用的元素时,也不会引发异常。
        • 能否请您分享以下信息:1).relevant html 源代码 2).Selenium Binding 版本 3).Browser 名称和版本
        • @AayushAgrawal 好吧,那么在您让我们自己尝试之前,要多说您的问题并不容易。请提供您当前拥有的代码,包括您正在测试的目标站点(如果可能)。
        猜你喜欢
        • 1970-01-01
        • 2016-05-17
        • 2016-11-14
        • 2011-08-03
        • 2019-11-28
        • 2019-01-26
        • 1970-01-01
        • 2016-07-04
        • 2016-07-08
        相关资源
        最近更新 更多