Как ожидать нескольких условий на invisibility_of_element_located с использованием Selenium через Python - PullRequest
1 голос
/ 30 мая 2019

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

element = WebDriverWait(driver, 30).until(
    expected_conditions.element_to_be_clickable((By.XPATH, xpath))
)
is_clickable = WebDriverWait(driver, 30).until(
    expected_conditions.invisibility_of_element_located((By.XPATH, layovers[0]))
)
is_clickable_2 = WebDriverWait(driver, 30).until(
    expected_conditions.invisibility_of_element_located((By.XPATH, layovers[1]))
)

if is_clickable and is_clickable_2:
    element.click()

И в списке layovers более двух элементов, в которых xpath хранится как str.

В таком случае, могу ли я превратить их все в одну функцию, которая проверяет невидимость элементов, а не повторяет их? (Я имею в виду, что WebDriverWait принимает только один вызов, а не определяет другую функцию-обертку.)

Ответы [ 2 ]

1 голос
/ 31 мая 2019

until_not ()

Метод until_not(method, message='') из WebDriverWait класс вызывает метод, предоставляемый с драйвером в качестве аргумента, пока возвращаемое значение не будет False .


Этот вариант использования

Поскольку ваш сценарий использования состоит в ожидании нескольких условий от invisibility_of_element_located() до , вы можете объединить оба ожидаемых условия:

  • WebDriverWait(driver, 30).until(expected_conditions.invisibility_of_element_located((By.XPATH, layovers[0])))
  • WebDriverWait(driver, 30).until(expected_conditions.invisibility_of_element_located((By.XPATH, layovers[1])))

внутри одного выражения с использованием метода until_not() через выражение lambda следующим образом:

WebDriverWait(driver,15).until_not(lambda driver: driver.find_element(By.XPATH,layovers[0]) and driver.find_element(By.XPATH,layovers[1]))

Outro

Вы можете найти пару похожих обсуждений в:

0 голосов
/ 31 мая 2019

Первым делом первым:

в момент написания WebDriverWait(driver, 30) будет создан объект ожидания веб-драйвера (явное ожидание).

Вместо этого вы можете сделать что-то вроде этого:

wait = WebDriverWait(driver,10) 

и вы можете использовать ссылочную переменную wait столько раз, сколько хотите в одном классе.

Вы можете создать метод, который будет принимать webdriverwait ссылка и наряду с этим вы можете передать xpath или локатор согласно вашему требованию.

def my_method(wait, xpath):
wait.until(
    expected_conditions.invisibility_of_element_located((By.XPATH, layovers[0]))

Надеюсь, это поможет.

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