检查元素在硒中是不是可点击

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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 好吧,那么在您让我们自己尝试之前,要多说您的问题并不容易。请提供您当前拥有的代码,包括您正在测试的目标站点(如果可能)。

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

当元素包含多个类名时如何在硒中复制标签?

检测声音是不是在硒中播放

量角器测试不起作用

在硒中按电话键盘输入键

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

如何检查元素是不是可点击