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

Фотография

Динамически генерируемый локатор-как записать в коде?

selenium python

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

#1 irina_kalitina

irina_kalitina

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Калитина Ирина


Отправлено 24 октября 2017 - 20:05

Добрый день! Ребята, подскажите, пожалуйста, если локатор динамически генерируется, получается его записать при помощи Selenium Builder, но он потом не воспроизводится.

Как в таких случаях искать другой, более надежный локатор?

Во вложении скриншот, о чем речь. Часть "reg59ef8bf2415adFacebook" постоянно меняется. Как его записать?

Прикрепленные файлы


  • 0

#2 baxatob

baxatob

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

  • Members
  • PipPipPipPip
  • 258 сообщений
  • ФИО:Юрий
  • Город:Riga

Отправлено 25 октября 2017 - 06:51

Например, при построении xpath-локатора:

 

- можете привязываться к уникальным элементам, стоящим выше или ниже по иерархии, используя оси;

- можете использовать функцию contains(., "Facebook") или другие функции xpath;

- можете комбинировать эти возможности.


  • 0

#3 irina_kalitina

irina_kalitina

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Калитина Ирина


Отправлено 25 октября 2017 - 11:32

Например, при построении xpath-локатора:

 

- можете привязываться к уникальным элементам, стоящим выше или ниже по иерархии, используя оси;

- можете использовать функцию contains(., "Facebook") или другие функции xpath;

- можете комбинировать эти возможности.

Спасибо за ответ:) я попробовала записать его так, но все равно не работает:

 

wd.find_element_by_xpath("//a[@class="bx-ss-selected"and contains(text(),'Facebook')].click() 


  • 0

#4 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 25 октября 2017 - 11:46

 

Например, при построении xpath-локатора:

 

- можете привязываться к уникальным элементам, стоящим выше или ниже по иерархии, используя оси;

- можете использовать функцию contains(., "Facebook") или другие функции xpath;

- можете комбинировать эти возможности.

Спасибо за ответ:) я попробовала записать его так, но все равно не работает:

 

wd.find_element_by_xpath("//a[@class="bx-ss-selected"and contains(text(),'Facebook')].click() 

 

не заэкранированы ковычки внутри стринги, как минимум. И сам локатор не верный.

wd.find_element_by_xpath("//a[@class='bx-ss-selected']/i").click();

  • 0

#5 baxatob

baxatob

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

  • Members
  • PipPipPipPip
  • 258 сообщений
  • ФИО:Юрий
  • Город:Riga

Отправлено 25 октября 2017 - 11:47

Что именно не работает? Какая ошибка?

У вас, судя по коду, питон? С ходу видно, что неправильно скобки и кавычки расставлены. Возможно, просто тут опечатались. Но в любом случае проверьте. Должно быть так:

wd.find_element_by_xpath("//a[@class='bx-ss-selected' and contains(text(),'Facebook')]").click() 

  • 0

#6 Snap

Snap

    Специалист

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


Отправлено 25 октября 2017 - 12:48

 

Например, при построении xpath-локатора:

 

- можете привязываться к уникальным элементам, стоящим выше или ниже по иерархии, используя оси;

- можете использовать функцию contains(., "Facebook") или другие функции xpath;

- можете комбинировать эти возможности.

Спасибо за ответ:) я попробовала записать его так, но все равно не работает:

 

wd.find_element_by_xpath("//a[@class="bx-ss-selected"and contains(text(),'Facebook')].click() 

 

Если быть более точным, не хватает всего лишь двойной кавычки в конце строки локатора ... 'Facebook')"

 

Правда из скриншота непонятно, какой текст содержит ссылка "a" (похоже никакого "Facebook" там нет, только иконка в теге "i").

Поэтому мой вариант 

"//a[contains(@onclick,'Facebook')]"

 если будет возвращено больше 1-ого элемента, придется уточнять.


  • 1

#7 irina_kalitina

irina_kalitina

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Калитина Ирина


Отправлено 25 октября 2017 - 13:32

 

Что именно не работает? Какая ошибка?

У вас, судя по коду, питон? С ходу видно, что неправильно скобки и кавычки расставлены. Возможно, просто тут опечатались. Но в любом случае проверьте. Должно быть так:

wd.find_element_by_xpath("//a[@class='bx-ss-selected' and contains(text(),'Facebook')]").click() 

Ошибка в синтаксисе SyntaxError: invalid syntax, явно где-то кавычки и скобки, вы правы:)

Да, это питон, совершенно верно. 

Я думаю, может не по тому локатору ищу, ведь class не содержит текст "Facebook", его содержит onclick (во вложении скриншот панели разработчика)

Прикрепленные файлы


  • 0

#8 Spock

Spock

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

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 25 октября 2017 - 13:42

жмите CTRL+f в инструментах разработчика и тут же проверяйте локаторы


  • 0

#9 irina_kalitina

irina_kalitina

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Калитина Ирина


Отправлено 25 октября 2017 - 14:01

 

 

Например, при построении xpath-локатора:

 

- можете привязываться к уникальным элементам, стоящим выше или ниже по иерархии, используя оси;

- можете использовать функцию contains(., "Facebook") или другие функции xpath;

- можете комбинировать эти возможности.

Спасибо за ответ:) я попробовала записать его так, но все равно не работает:

 

wd.find_element_by_xpath("//a[@class="bx-ss-selected"and contains(text(),'Facebook')].click() 

 

Если быть более точным, не хватает всего лишь двойной кавычки в конце строки локатора ... 'Facebook')"

 

Правда из скриншота непонятно, какой текст содержит ссылка "a" (похоже никакого "Facebook" там нет, только иконка в теге "i").

Поэтому мой вариант 

"//a[contains(@onclick,'Facebook')]"

 если будет возвращено больше 1-ого элемента, придется уточнять.

 

Роман! Спасибо огромное! :yahoo:  Именно в этом была проблема, я не в том локаторе искала текст "Facebook".


  • 1



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

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