#python #selenium #webdriverwait
Вопрос:
У меня есть этот фрагмент кода, который работает как есть:
time.sleep(0.7)
self.driver.find_element_by_xpath("anyXpath").click()
Я заставляю программу ждать некоторое время, чтобы действительно можно было нажать кнопку во всплывающем окне, и это решение работает.
Теперь я хочу сделать то же самое, но с WEbDriverWait
, и я написал это:
WebDriverWait(self.driver,10).until(expected_conditions.presence_of_element_located(By.XPATH, "anyXpath"))
self.driver.find_element_by_xpath("anyXpath").click()
Но кнопка никогда не нажимается. Что я делаю не так? Я готов использовать другое ожидаемое условие, отличное от presence_of_element_located, но я думаю, что оно также должно работать с последним.
Спасибо.
Комментарии:
1. Используйте элемент для кликабельности, а затем используйте .click() после него.
Ответ №1:
Импортируя WebDriverWait
, expected_conditions
, и By
, вы можете подождать, пока веб-драйвер не сочтет элемент кликабельным, прежде чем он щелкнет по элементу.
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(10, self.driver).until(
expected_conditions.element_to_be_clickable(
(By.XPATH, "//xpath//to//element")
)
).click()
Убедитесь, что вы передаете кортеж element_to_be_clickable()
кому .
Комментарии:
1. Спасибо! Кажется, теперь это работает, я поменял позиции «10» и «драйвер», хотя и использовал «self.driver» вместо «драйвер».
Ответ №2:
Вы можете попробовать этот метод. Он ждет, пока элемент будет доступен для щелчка
WebDriverWait(10, driver).until(EC.element_to_be_clickable(By.XPATH, "anyXpath"))
импортировать
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
Комментарии:
1. Это тоже не работает. Вы написали «(10, драйвер)», и я попробовал использовать «10» и «драйвер»/»self.driver» в разных положениях внутри скобок. Я также использовал expected_conditions вместо EC, что, я думаю, одно и то же.
2. Является ли часть element_to_be_clickable работой ? Он ждет, пока html-элемент станет доступным для кликабельности
3. Если [element_to_be_clickable] не работает ? Я думаю, что проблема в всплывающем окне. Возможно, вам потребуется переключиться на это окно, прежде чем вы нажмете кнопку.
4. Проблема заключается в переданных значениях
element_to_be_clickable
. Эта функция принимает кортеж. ТакжеBy
не был импортирован.5. Убедитесь, что вы импортируете все необходимое. [element_to_be_clickable] требуется только локатор, поэтому я думаю, вам следует еще раз проверить, правильно ли вы ввели локатор.