在python-selenium中,有两种查找元素的方法。
首先,您可以使用实际方法来查找元素,例如
element = find_element_by_xpath(myxpath)
第二,您可以使用WebDriverWait
确保网络驱动程序等待一段时间,直到在特定状态下找到元素
element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, myxpath)))
对于后一种方法,您可以定义几个“预期条件”(请参见here):
element_located_to_be_selected, element_to_be_clickable, element_to_be_selected etc.
我的问题:仅使用第一种方法来查找元素,如何检查该元素处于哪个状态(以防万一我找到了该元素)。如何检查“可点击”或“可选”等?我可以使用element
对象的属性来确定元素的 state 吗?
答案 0 :(得分:3)
否,没有直接方法可以通过 Selenium 检索WebElement的确切状态。
find_element_by_xpath()只需使用 xpath 查找第一个匹配的WebElement。如果找不到匹配的元素,它将引发NoSuchElementException
但是 Selenium 提供了多种方法来验证 WebElement 的状态,如下所示:
is_displayed()
:无论用户对元素是否可见,都返回一个布尔值(是/否)。
is_enabled()
:无论元素是否启用,都返回一个布尔值(是/否)。
is_selected()
:无论是否选择元素,都返回一个布尔值(是/否)。
expected_conditions罐头通常在元素达到确定状态时用于访问元素,如下所示:
presence_of_element_located(locator)
提及:
class selenium.webdriver.support.expected_conditions.presence_of_element_located(locator)
An expectation for checking that an element is present on the DOM of a page. This does not necessarily mean that the element is visible.
visibility_of_element_located(locator)
提及:
class selenium.webdriver.support.expected_conditions.visibility_of_element_located(locator)
An expectation for checking that an element is present on the DOM of a page and visible. Visibility means that the element is not only displayed but also has a height and width that is greater than 0.
element_to_be_clickable(locator)
提到:
class selenium.webdriver.support.expected_conditions.element_to_be_clickable(locator)
An Expectation for checking an element is visible and enabled such that you can click it.
答案 1 :(得分:0)
输入:
driver.findElement(your-element).click()
放入try-catch块,然后处理异常
答案 2 :(得分:0)
没有任何is_clickable()
函数或属性。看着source code
class element_to_be_clickable(object):
""" An Expectation for checking an element is visible and enabled such that
you can click it."""
def __init__(self, locator):
self.locator = locator
def __call__(self, driver):
element = visibility_of_element_located(self.locator)(driver)
if element and element.is_enabled():
return element
else:
return False
您可以看到element_to_be_clickable
使用visibility_of_element_located
,它使用element.is_displayed()
等待可见性,并使用element.is_enabled()
检查该元素是否已启用。您可以检查这两者的组合。
对于element_located_to_be_selected
,您确实有一个函数element.is_selected()
。
关于“ click()”,它没有出现在Python WebElement API中,但是在Java's API中它指出“要单击元素有一些先决条件。元素必须可见并且高度和宽度必须大于0“,并检查这些参数是否足够。
答案 3 :(得分:0)
类似的东西:
button = driver.find_element_by_class_name('?')
href_data = button.get_attribute('href')
if href_data is None:
is_clickable = False