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

Тестирование юзабилити (usability)
онлайн, начало 24 октября
Программирование на Python для тестировщиков
онлайн, начало 26 октября
Командная строка: инструменты тестировщика
онлайн, начало 31 октября
Тестирование мобильных приложений
онлайн, начало 31 октября
Фотография

Ошибка 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
  • 742 сообщений
  • ФИО:Роман
  • Город:Москва


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

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

 

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

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


  • 0

http://starbugss.blogspot.ru - "Звездные баги", мой блог.


#3 TatyanaV

TatyanaV

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

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


Отправлено 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 349 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

Отправлено 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
  • 317 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 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 349 сообщений
  • ФИО:Андрей Адеркин
  • Город:Йошкар-Ола

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

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

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


  • 2

#11 Snap

Snap

    Специалист

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


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

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

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

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

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


  • 1

http://starbugss.blogspot.ru - "Звездные баги", мой блог.


#12 TatyanaV

TatyanaV

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

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


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


Selenium 2.0: стартовый уровень
онлайн, начало 9 ноября
Программирование на Java для тестировщиков
онлайн, начало 16 ноября
Автоматизация функционального тестирования
онлайн, начало 9 ноября
Selenium WebDriver: полное руководство
онлайн, начало 19 октября



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

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

Яндекс.Метрика
Реклама на портале