Помогите реализовать прерывание цикла,через н-ное количество попыток?Установить счётчик в цикл

    #Выбор города
    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
1 лайк

Спасибо вам 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

1 лайк

Так вот эта страшная конструкция и есть явное ожидание ))))))))
Почитай про implicit и explicit waits. Пример тебе @rmerkushin уже показал.

Спасибо большое за ответ,пробовал делать так как вы написали,едемент ещё не подгрузился,а клик уже делается в поле с выпадающим списком при такой реализации,поэтому такой способ не подходит.

Там есть другие Expected Conditions, попробуйте их или их комбинации через AND

Здравствуйте, не очень быстро отвечаю. Спасибо вам,что откликнулись) Попробовать использовать что-то типа
“element = wait.until(EC.element_to_be_clickable AND EC.presence_of_element_located ((By.ID, ‘someid’)))” ?

Да, можно это. Можно на видимость добавить. Попробуйте комбинации.
З.Ы.: если список городов или что там у вас, грузится из бд, то нужно ожидание на ajax