我能够验证一个元素是否存在以及它是否显示,但似乎无法找到一种方法来查看它是否是“可点击的”(不是在谈论禁用)。
问题在于,通常在填充webform时,我想要的元素在加载时可能会叠加div。 div本身很难被发现,因为它的id,名称甚至css都很灵活。因此,我试图检测输入字段是否可以“点击”或“填充”。当存在重叠div时,该字段不能由普通用户填充(因为div将覆盖输入字段而不允许用户填充它),但它可以由selenium填充。我希望防止这种情况,只有当用户也可以填充它时才允许填充它。
答案 0 :(得分:15)
你可以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"
答案 1 :(得分:3)
在对输入字段执行任何操作之前,您可以使用webElement.isEnabled()
和webElement.isDisplayed()
方法...
我希望这能解决你的问题...
另外,你也可以设置一个循环来检查上面两个条件,如果这些是真的你可以指定输入文本,你可以再次找到相同的元素,你可以得到webelement的文本并将该文本与你输入的文字。如果那些匹配你可以走出循环。