Перейти к содержимому

Фотография

Ошибка Unable to locate element


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 12

#1 Sall1e

Sall1e

    Новый участник

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Алексей
  • Город:Санкт-Петербург

Отправлено 01 августа 2018 - 15:54

Доброго времени суток!
Подскажите пожалуйста, в чём может быть проблема. Тесты на 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, пишет эту же самую ошибку
Подскажите что делаю не так..Заранее спасибо


  • 0

#2 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 01 августа 2018 - 18:44

Как я вижу по работе браузера, он просто не может перейти на страницу, где расположен этот элемент, как мне быть?

 

Что это значит? Может быть страница не успевает загрузиться? Можно попробовать добавить паузу и посмотреть, что будет.

Если это новая страница, значит нужно перейти на нее.


  • 0

#3 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 02 августа 2018 - 06:37

Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.

Например - ожидать кликабельность элемента с именем "address".


  • 0

#4 Sall1e

Sall1e

    Новый участник

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Алексей
  • Город:Санкт-Петербург

Отправлено 02 августа 2018 - 09:30

Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.

Например - ожидать кликабельность элемента с именем "address".

немного не понимаю какую команду написать в pycharm

прочитал про Explicit Waits, но так и не понял что и куда


  • 0

#5 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 02 августа 2018 - 09:33

 

Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.

Например - ожидать кликабельность элемента с именем "address".

немного не понимаю какую команду написать в pycharm

прочитал про Explicit Waits, но так и не понял что и куда

 

http://selenium-pyth...s.io/waits.html


  • 0

#6 Sall1e

Sall1e

    Новый участник

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Алексей
  • Город:Санкт-Петербург

Отправлено 02 августа 2018 - 09:35

 

 

Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.

Например - ожидать кликабельность элемента с именем "address".

немного не понимаю какую команду написать в pycharm

прочитал про Explicit Waits, но так и не понял что и куда

 

http://selenium-pyth...s.io/waits.html

 

Я же только что написал что прочитал это


  • 0

#7 Sall1e

Sall1e

    Новый участник

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Алексей
  • Город:Санкт-Петербург

Отправлено 02 августа 2018 - 09:43

 

 

Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.

Например - ожидать кликабельность элемента с именем "address".

немного не понимаю какую команду написать в pycharm

прочитал про Explicit Waits, но так и не понял что и куда

 

http://selenium-pyth...s.io/waits.html

 

Просто я не могу понять куда писать эти команды, в начало теста или перед этим шагом 


  • 0

#8 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 02 августа 2018 - 10:58

Это ожидание. Его надо писать туда, где нужно, чтобы скрипт "подождал". В данном случае - между кликом, после которого идёт обновление страницы, и заполнением этой "новой" страницы.


  • 0

#9 Sall1e

Sall1e

    Новый участник

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Алексей
  • Город:Санкт-Петербург

Отправлено 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


  • 0

#10 Freiman

Freiman

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 591 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 02 августа 2018 - 14:00

Судя по всему, вы ждете, когда из DOM пропадет тэг html, но вот он почему-то не пропадает :) поэтому и timeout.

Вам же нужно дождаться, когда появится элемент с name="address" - вот и добавьте это ожидание.


  • 2

#11 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 02 августа 2018 - 14:36

Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.

Например - ожидать кликабельность элемента с именем "address".

Не ожидал от вас ) . Мы же пытаемся найти причину. Для этого пауза вполне годный вариант. А получается, что автора вопроса пока что больше запутали.

Уже потом, да, можно сделать ожидания.


  • 1

#12 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 03 августа 2018 - 05:34

 

Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.

Например - ожидать кликабельность элемента с именем "address".

Не ожидал от вас ) . Мы же пытаемся найти причину. Для этого пауза вполне годный вариант. А получается, что автора вопроса пока что больше запутали.

Уже потом, да, можно сделать ожидания.

 

Практика показывает, что установленный костыль (в данном случае просто пауза) - часто так и остается в коде. Уж лучше сразу советовать без костылей, как мне кажется. 

Тем более, общая суть судя по всему понятна была, осталось лишь правильный ExpectedCondition подставить. 


  • 0

#13 Sall1e

Sall1e

    Новый участник

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Алексей
  • Город:Санкт-Петербург

Отправлено 03 августа 2018 - 08:17

 

 

Пауза - это не очень хороший вариант. Лучше сделать wait until появление / кликабельность какого-нибудь элемента на "новой" странице.

Например - ожидать кликабельность элемента с именем "address".

Не ожидал от вас ) . Мы же пытаемся найти причину. Для этого пауза вполне годный вариант. А получается, что автора вопроса пока что больше запутали.

Уже потом, да, можно сделать ожидания.

 

Практика показывает, что установленный костыль (в данном случае просто пауза) - часто так и остается в коде. Уж лучше сразу советовать без костылей, как мне кажется. 

Тем более, общая суть судя по всему понятна была, осталось лишь правильный ExpectedCondition подставить. 

 

Спасибо, проблему решил. Теперь никогда не буду накликивать через seleniumbilder :)


  • 1


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных