如何使用 Selenium WebDriver 检查元素是不是可点击

Posted

技术标签:

【中文标题】如何使用 Selenium WebDriver 检查元素是不是可点击【英文标题】:How to check if an element is clickable or not using Selenium WebDriver如何使用 Selenium WebDriver 检查元素是否可点击 【发布时间】:2015-06-14 06:47:28 【问题描述】:

我有一个容器,其中包含许多元素。我正在循环遍历元素。 我的问题是检查元素是否不可点击的语法是什么。

【问题讨论】:

Selenium WebDriver - determine if element is clickable (i.e. not obscured by dojo modal lightbox)的可能重复 【参考方案1】:

以下应该使它工作 -

element.is_displayed() and element.is_enabled()

此代码使用 Python。您可以将其更改为您选择的语言。

【讨论】:

【参考方案2】:

现有方法isDisplayed 和isEnabled 无法检查元素是否可点击。

如果你想等待元素直到它可以点击然后点击它,你可能想看这个:Selenium WebDriver - determine if element is clickable (i.e. not obscured by dojo modal lightbox)

实际上,如果不实际点击元素,可能很难检查元素是否可点击。

【讨论】:

如果 selenium 尝试点击和元素但不能,它是否通过返回某个值或任何东西来通知客户端? 这取决于各种条件,我们确实有 StaleElementExceptions、ElementNotVisibleException 等,但在某些情况下,可能会捕获点击但没有发生点击事件,我们没有任何跟踪它的方法。【参考方案3】:

一种选择是执行以下操作。

from selenium.common.exceptions import WebDriverException    
try:
  element.click()
  # add to list of clickable elements
except WebDriverException:
  print "Element is not clickable"

【讨论】:

【参考方案4】:

if else 条件可以尝试以下方法

if(driver.findElement(By.xpath("--xpath of the clickable content")).isEnabled())

System.out.println("Element is clickable");

else

System.out.println("Element is not clickable");

【讨论】:

你可以做断言而不是 if else 也 它被启用并不直接意味着它是可点击的——例如,它可能被启用但被另一个div覆盖。【参考方案5】:

您可以为其创建自定义关键字,但如果元素显示并启用是必需的,但这并不是使元素可点击的所有条件。

自定义库中的自定义关键字示例:

from selenium.webdriver.remote.webelement import WebElement as webelement

def web_element_is_clickable(self, webelement):
    return webelement.is_displayed() and webelement.is_enabled()

【讨论】:

【参考方案6】:
desplegar = bot.find_element_by_xpath('//*[@id="login-button"]')
try:
    if desplegar.is_enabled:
        desplegar.click()
    else:
         break
except:
    desplegar = None

【讨论】:

感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。一个适当的解释将通过展示为什么这是解决问题的好方法来极大地提高其长期价值,并使其对有其他类似问题的未来读者更有用。请编辑您的答案以添加一些解释,包括您所做的假设。

以上是关于如何使用 Selenium WebDriver 检查元素是不是可点击的主要内容,如果未能解决你的问题,请参考以下文章

如何使用selenium webdriver来判断一个网页加载完毕

Selenium & webdriver.io 如何使用 executeScript?

如何使用selenium webdriver来判断一个网页加载完毕

如何使用 C# 在 Selenium WebDriver (Selenium 2) 中最大化浏览器窗口?

如何在 ruby​​ 中使用 Selenium WebDriver (selenium 2.0) 客户端设置选项

如何在 Java 中使用 Selenium WebDriver (Selenium 2) 输入文本框?