Доброго времени суток!
Подскажите пожалуйста, в чём может быть проблема. Тесты на Selenium+Python
wd.get("https://nothing.com")
wd.find_element_by_css_selector("button._3F-tM_2").click()
wd.find_element_by_id("login").click()
wd.find_element_by_id("login").clear()
wd.find_element_by_id("login").send_keys("example@gmail.com")
wd.find_element_by_id("password").click()
wd.find_element_by_id("password").clear()
wd.find_element_by_id("password").send_keys("easyword")
wd.find_element_by_xpath("//form[@class='_2iJt_4P']//button[.='Войти']").click()
wd.find_element_by_xpath("//div[@class='_1FXkOC2']//a[.='Добавить объявление']").click()
wd.find_element_by_css_selector("div.Select-placeholder").click()
wd.find_element_by_xpath("//div[@class='_38UbcVE']//button[.=' Продолжить ']").click()
wd.find_element_by_name("address").click()
wd.find_element_by_name("address").clear()
wd.find_element_by_name("address").send_keys("Санкт-Петербург")
Тест обрывается на ошибке, Message: Unable to locate element: [name="address"]
Как я вижу по работе браузера, он просто не может перейти на страницу, где расположен этот элемент, как мне быть?
Пробовал через xpath, пишет эту же самую ошибку
Подскажите что делаю не так..Заранее спасибо
Ошибка Unable to locate element
#1
Отправлено 01 августа 2018 - 15:54
#2
Отправлено 01 августа 2018 - 18:44
Как я вижу по работе браузера, он просто не может перейти на страницу, где расположен этот элемент, как мне быть?
Что это значит? Может быть страница не успевает загрузиться? Можно попробовать добавить паузу и посмотреть, что будет.
Если это новая страница, значит нужно перейти на нее.
#3
Отправлено 02 августа 2018 - 06:37
Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.
Например - ожидать кликабельность элемента с именем "address".
#4
Отправлено 02 августа 2018 - 09:30
Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.
Например - ожидать кликабельность элемента с именем "address".
немного не понимаю какую команду написать в pycharm
прочитал про Explicit Waits, но так и не понял что и куда
#5
Отправлено 02 августа 2018 - 09:33
Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.
Например - ожидать кликабельность элемента с именем "address".
немного не понимаю какую команду написать в pycharm
прочитал про Explicit Waits, но так и не понял что и куда
http://selenium-pyth...s.io/waits.html
#6
Отправлено 02 августа 2018 - 09:35
Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.
Например - ожидать кликабельность элемента с именем "address".
немного не понимаю какую команду написать в pycharm
прочитал про Explicit Waits, но так и не понял что и куда
http://selenium-pyth...s.io/waits.html
Я же только что написал что прочитал это
#7
Отправлено 02 августа 2018 - 09:43
Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.
Например - ожидать кликабельность элемента с именем "address".
немного не понимаю какую команду написать в pycharm
прочитал про Explicit Waits, но так и не понял что и куда
http://selenium-pyth...s.io/waits.html
Просто я не могу понять куда писать эти команды, в начало теста или перед этим шагом
#8
Отправлено 02 августа 2018 - 10:58
Это ожидание. Его надо писать туда, где нужно, чтобы скрипт "подождал". В данном случае - между кликом, после которого идёт обновление страницы, и заполнением этой "новой" страницы.
#9
Отправлено 02 августа 2018 - 13:42
Это ожидание. Его надо писать туда, где нужно, чтобы скрипт "подождал". В данном случае - между кликом, после которого идёт обновление страницы, и заполнением этой "новой" страницы.
wd.find_element_by_xpath("//div[@class='_38UbcVE']//button[.=' Продолжить ']").click()
WebDriverWait(wd, 10).until(staleness_of(wd.find_element_by_tag_name('html')))
wd.find_element_by_name("address").click()
wd.find_element_by_name("address").clear()
wd.find_element_by_name("address").send_keys("Санкт-Петербург, Новорощинская улица 4")
wd.find_element_by_id("flat_number").click()
правильно же прописал всё? выдаёт ошибку TimeoutException
#10
Отправлено 02 августа 2018 - 14:00
Судя по всему, вы ждете, когда из DOM пропадет тэг html, но вот он почему-то не пропадает :) поэтому и timeout.
Вам же нужно дождаться, когда появится элемент с name="address" - вот и добавьте это ожидание.
#11
Отправлено 02 августа 2018 - 14:36
Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.
Например - ожидать кликабельность элемента с именем "address".
Не ожидал от вас ) . Мы же пытаемся найти причину. Для этого пауза вполне годный вариант. А получается, что автора вопроса пока что больше запутали.
Уже потом, да, можно сделать ожидания.
#12
Отправлено 03 августа 2018 - 05:34
Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.
Например - ожидать кликабельность элемента с именем "address".
Не ожидал от вас ) . Мы же пытаемся найти причину. Для этого пауза вполне годный вариант. А получается, что автора вопроса пока что больше запутали.
Уже потом, да, можно сделать ожидания.
Практика показывает, что установленный костыль (в данном случае просто пауза) - часто так и остается в коде. Уж лучше сразу советовать без костылей, как мне кажется.
Тем более, общая суть судя по всему понятна была, осталось лишь правильный ExpectedCondition подставить.
#13
Отправлено 03 августа 2018 - 08:17
Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.
Например - ожидать кликабельность элемента с именем "address".
Не ожидал от вас ) . Мы же пытаемся найти причину. Для этого пауза вполне годный вариант. А получается, что автора вопроса пока что больше запутали.
Уже потом, да, можно сделать ожидания.
Практика показывает, что установленный костыль (в данном случае просто пауза) - часто так и остается в коде. Уж лучше сразу советовать без костылей, как мне кажется.
Тем более, общая суть судя по всему понятна была, осталось лишь правильный ExpectedCondition подставить.
Спасибо, проблему решил. Теперь никогда не буду накликивать через seleniumbilder :)
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных