Как получить «состояние» элемента в python-selenium? - PullRequest
0 голосов
/ 27 сентября 2018

В python-selenium есть два способа найти элемент.

Во-первых, вы можете использовать фактический метод для поиска элемента, например,

element = find_element_by_xpath(myxpath)

Во-вторых, вы можете использоватьWebDriverWait, чтобы убедиться, что веб-драйвер ожидает некоторого времени ожидания, пока элемент не будет найден в каком-то заданном состоянии :

element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, myxpath)))

Для последнего метода вы можете определить несколько 'ожидаемых условий'(см. здесь ):

element_located_to_be_selected, element_to_be_clickable, element_to_be_selected etc.

Мой вопрос: используя только первый метод поиска элемента, как я могу проверить, в каком состоянии этоэлемент в (в случае, если я нашел элемент).Как я могу проверить, является ли «кликабельным» или «выбираемым» и т. Д.?Есть ли атрибут объекта element, который я могу использовать для определения состояния элемента?

Ответы [ 4 ]

0 голосов
/ 27 сентября 2018

Нет , прямого метода для получения точного состояния WebElement через Selenium .


find_element_by_xpath (не существует)xpath)

find_element_by_xpath () просто найдет первый соответствующий WebElement, используя xpath .Если соответствующий элемент не найден, он вызовет NoSuchElementException

Но Selenium предлагает несколько методов для проверки состояния WebElement следующим образом:

  • is_displayed(): возвращает логическое значение (true / false), независимо от того, видим элемент для пользователя или нет.

  • is_enabled(): возвращает логическое значение (true / false) независимо от того, включен элемент или нет.

  • is_selected(): возвращает логическое значение (true / false), независимо от того, выбран элемент или нет.


WebDriverWait () в сочетании с классом Ожидаемые_условия

Консервированные ожидаемые_условия обычно полезны для доступа к элементам, когда они достигают определенного состояния следующим образом:

  • 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.
    
0 голосов
/ 27 сентября 2018

Нет функции или атрибута is_clickable().Глядя на исходный код

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 API it stats "Есть несколько предварительных условий для элемента, по которому нужно щелкнуть. Элемент должен быть видимым, и он должен иметь высоту и ширинубольше 0 ", проверка этих параметров должна быть достаточной.

0 голосов
/ 27 сентября 2018

Примерно так:

button = driver.find_element_by_class_name('?')
href_data = button.get_attribute('href')
if href_data is None:
is_clickable = False
0 голосов
/ 27 сентября 2018

Поместите это: driver.findElement(your-element).click() в блок try-catch, затем обработайте исключение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...