#Выбор города
while True:
try:
search = self.driver.find_element_by_xpath("//*[@id='Vladivostok']")
except Exception:
time.sleep(1)
self.driver.find_element_by_xpath("//*[@id='clickToCityField']").click()
else:
search.click()
break
i = 0
while i < 10:
i++
try:
search = self.driver.find_element_by_xpath("//*[@id='Vladivostok']")
except Exception:
time.sleep(1)
self.driver.find_element_by_xpath("//*[@id='clickToCityField']").click()
else:
search.click()
break
Спасибо вам RayRom,я пробовал счётчик в try подставлять,цикл доходил до исключения и в нём и оставался постоянно кликать. Есть ещё вопрос не работал никогда с элементами с абсолютно идентичными элементами на форме,но находящимися на разных страницах, на первой странице отрабатывает скрипт,доходит до 2го такого случая и всё коллапс( например элемент //input[@id=‘Adress’]
Не знаю, у меня таких проблем не было.
А зачем эта страшная конструкция:
Не проще ли использовать waits?
Дмитрий здравствуй,неявный ожидания дают эзепт element not clickable и выкидывает,только нажали на выпадающий список сразу кликает в поле с элементами списка,пока они ещё не подгрузились,с явными ожиданиями работать-плохой стиль пишут везде про это.Пожэтому и спользую эту страшную конструкцию.
Явные ожидания вроде time.sleep(3)
- зло. А WebDriverWait был специально придуман для таких случаев:
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, 'Vladivostok'))
)
Если не устраивает такой подход, поглядите как сделаны ожидания хотя бы в том же #webdriver:selenide
Так вот эта страшная конструкция и есть явное ожидание ))))))))
Почитай про implicit и explicit waits. Пример тебе @rmerkushin уже показал.
Спасибо большое за ответ,пробовал делать так как вы написали,едемент ещё не подгрузился,а клик уже делается в поле с выпадающим списком при такой реализации,поэтому такой способ не подходит.
Здравствуйте, не очень быстро отвечаю. Спасибо вам,что откликнулись) Попробовать использовать что-то типа
“element = wait.until(EC.element_to_be_clickable AND EC.presence_of_element_located ((By.ID, ‘someid’)))” ?
Да, можно это. Можно на видимость добавить. Попробуйте комбинации.
З.Ы.: если список городов или что там у вас, грузится из бд, то нужно ожидание на ajax