Не может получить энный узел в Селене

Я пытаюсь записать выражения XPath так, чтобы мои тесты не были повреждены маленькими конструктивными изменениями. Таким образом вместо выражений, которые генерирует Селен IDE, я пишу свое собственное.

Вот проблема:

//input[@name='question'][7]

Это выражение не работает вообще. Названный 'вопрос' узлов входа распространен через страницу. Они не одноуровневые элементы.

Я попытался использовать промежуточное выражение, но оно также перестало работать.

(//input[@name='question'])[2]
error = Error: Element (//input[@name='question'])[2] not found

Вот почему я предполагаю, что Seleniun имеет неправильную реализацию XPath.

Согласно документам XPath, предикат положения должен отфильтровать положением в наборе узлов, таким образом, это должно найти седьмое input с именем 'question'. В Селене это не работает. Селекторы CSS (:nth-of-kind) ни один.

Я должен был записать выражение, которое фильтрует их общих родителей:

//*[contains(@class, 'question_section')][7]//input[@name='question']

Действительно ли это - конкретный вопрос Селена, или я читаю спецификации неправильный путь? Что я могу сделать для создания более короткого выражения?

16
задан culebrón 30 July 2010 в 16:47
поделиться

2 ответа

Вот проблема:

//input[@name='question'][7] 

Это выражение вообще не работает.

Это FAQ.

[] имеет более высокий приоритет, чем //.

Приведенное выше выражение выбирает каждый input элемент с @name = 'question', который является 7-м ребенком своего родителя -- и, видимо, родители input элементов в документе, который не показан, не имеют так много input детей.

Использовать (обратите внимание на скобки):

(//input[@name='question'])[7]

Это выбирает 7-й элемент input в документе, который удовлетворяет условиям предиката.

Edit:

Люди, знающие Selenium (Dave Hunt), подсказывают, что приведенное выше выражение записывается в Selenium как:

xpath=(//input[@name='question'])[7]
25
ответ дан 30 November 2019 в 17:38
поделиться

Если вам нужен 7-й вход с атрибутом name со значением question в источнике, попробуйте следующее:

/descendant::input[@name='question'][7]
6
ответ дан 30 November 2019 в 17:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: