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

Тестирование безопасности
онлайн, начало 16 июня
Автоматизатор мобильных приложений
онлайн, начало 16 июня
Автоматизация тестирования REST API на Python
онлайн, начало 16 июня
Selenium WebDriver: полное руководство
онлайн, начало 18 июня
Фотография

Сложный xpath запрос


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

#1 Rinss

Rinss

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

  • Members
  • Pip
  • 66 сообщений

Отправлено 14 марта 2013 - 09:05

Доброго времени суток.
Есть такой кусок кода
<li class="form-fields--border one-half">
<label for="SendToCandidate_R1_FirstName">First Name:*</label>
<input id="SendToCandidate_R1_FirstName" class="TextControl" type="text" required="required" value="james" name="SendToCandidate_R1_FirstName">
</li>

Подскажите пожалуйста, как можно обратится к value если мы знаем только текст label(First Name). По айдишнику не получится, нужно именно обращатся черезе label.

Спасибо большое
  • 0

#2 Rinss

Rinss

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

  • Members
  • Pip
  • 66 сообщений

Отправлено 14 марта 2013 - 09:24

как-то сегодня на свежую голову удалось сделать самому.
Вот такой вот запрос получился

//label[contains(text(), 'First Name:*')]/following-sibling::input[@value='james']

Можно как-то сделать альтернативу на css? Ибо IE упорно не хочет быстро работать с xpath.

Спасибо
  • 0

#3 tab15

tab15

    Активный участник

  • Members
  • PipPip
  • 128 сообщений

Отправлено 14 марта 2013 - 09:30

//li[label="First Name:*"]/input/@value
ага...автор уже сам решил проблему:)

Про css пишут, что вроде как нельзя
http://www.opinionat...ith-xpath-text/
  • 0

#4 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 859 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 14 марта 2013 - 12:40

Альтернативы на css не существует. Можно использовать Sizzle
типо как-то так
label:contains("First Name:*")+input

Но для этого его необходимо подключать, так что решайте, нужно это вам или нет
http://selenium.polt...lector-library/
  • 0

#5 Rinss

Rinss

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

  • Members
  • Pip
  • 66 сообщений

Отправлено 14 марта 2013 - 12:43

Начал копать дальше и наткнулся еще на такую форму
<li class="form-fields--border one-whole">
<label for="SendToCandidate_R1_MessageToCandidate" style="background-color: transparent;"> Message to candidate: * </label>
<textarea id="SendToCandidate_R1_MessageToCandidate" class="MultilineControl" required="required" cols="53" rows="8" name="SendToCandidate_R1_MessageToCandidate" style="background-color: transparent;">Hello! Please complete the information on this form so that we can run a background report.</textarea>
<div id="errorId_SendToCandidate_R1_MessageToCandidate" class="error-input">Message to candidate is required</div>
</li>

Можно ли как-то унифицировать вот этот запрос
//label[contains(text(), 'First Name:*')]/following-sibling::input[@value='james']

чтобы можно было гибко использовать его? пробовал просто написать через or - не получилось.
Спасибо
  • 0

#6 appmen

appmen

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

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 14 марта 2013 - 13:56

т.е. конструкция типа такой
//label[contains(text(), 'First Name:*')]/following-sibling::input[@value='james']|//label[contains(text(), 'Message to candidate: *')]/following-sibling::textarea[@name='SendToCandidate_R1_MessageToCandidate']
не работает?
Правда я такие конструкции ни разу не писал... :blush:/>
  • 0

#7 Rinss

Rinss

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

  • Members
  • Pip
  • 66 сообщений

Отправлено 14 марта 2013 - 14:11

такая работает, думал как-то элегантней можно
  • 0

#8 appmen

appmen

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

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 14 марта 2013 - 14:29

такая работает, думал как-то элегантней можно

ну, тогда можно сделать переменные с локаторами или сразу веб элементы взять и их искать, так намного элегантнее будет
  • 0

#9 sawoy

sawoy

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

  • Members
  • Pip
  • 51 сообщений
  • ФИО:Alex Savchuk

Отправлено 18 марта 2013 - 00:58

Rinss,

как Вы можете видеть обычно label связан с другим элементом через
атрибут for, значением которого должен быть id связанного элемента.

Соответственно, xpath запрос будет выглядеть так:

id(//label[text()='<text of label>']/@for)
  • 0


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



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

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

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