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

Программирование на Python для тестировщиков
онлайн, начало 17августа
SQL для тестировщиков
онлайн, начало 20 августа
Программирование на C# для тестировщиков
онлайн, начало 24 августа
Тестирование производительности (JMeter)
онлайн, начало 24 августа
Фотография

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


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

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

 

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

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


  • 0

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


#3 TatyanaV

TatyanaV

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

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


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

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


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

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

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

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


  • 2

#11 Snap

Snap

    Специалист

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


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

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

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

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

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


  • 1

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


#12 TatyanaV

TatyanaV

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

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


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



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

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

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