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

Организация автоматизированного тестирования
онлайн, начало 14 декабря
Комплексная система подготовки тестировщиков по программе ISTQB FL
онлайн, начало 12 декабря
Школа тест-менеджеров v. 2.0
онлайн, начало 12 декабря
Тестирование веб-приложений 2.0
онлайн, начало 14 декабря
Фотография

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


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

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

 

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

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


  • 0

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


#3 TatyanaV

TatyanaV

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

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


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

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


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

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

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

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


  • 2

#11 Snap

Snap

    Специалист

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


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

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

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

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

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


  • 1

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


#12 TatyanaV

TatyanaV

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

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


Отправлено 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: стартовый уровень
онлайн, начало 7 декабря
Программирование на Java для тестировщиков
онлайн, начало 21 декабря
Автоматизация функционального тестирования
онлайн, начало 14 декабря
Selenium WebDriver: полное руководство
онлайн, начало 23 ноября



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

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

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