如何获取python-selenium中元素的“状态”?

时间:2018-09-27 08:17:42

标签: python selenium selenium-webdriver webdriver webdriverwait

在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 吗?

4 个答案:

答案 0 :(得分:3)

,没有直接方法可以通过 Selenium 检索WebElement的确切状态


find_element_by_xpath(xpath)

find_element_by_xpath()只需使用 xpath 查找第一个匹配的WebElement。如果找不到匹配的元素,它将引发NoSuchElementException

但是 Selenium 提供了多种方法来验证 WebElement 的状态,如下所示:

  • is_displayed():无论用户对元素是否可见,都返回一个布尔值(是/否)。

  • is_enabled():无论元素是否启用,都返回一个布尔值(是/否)。

  • is_selected():无论是否选择元素,都返回一个布尔值(是/否)。


WebDriverWait()与Expected_conditions类结合在一起

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