Я пытаюсь написать выражения xpath, чтобы мои тесты не были разбиты небольшими изменениями дизайна. Поэтому вместо выражений, которые генерирует Selenium IDE, я пишу свой собственный.
Здесь проблема:
//input[@name='question'][7]
Это выражение не работает вообще. Входные узлы с именем "вопрос" распространяются по всей странице. Они не братья и сестры.
Я пробовал использовать промежуточное выражение, но оно также терпит неудачу.
(//input[@name='question'])[2]
error = Error: Element (//input[@name='question'])[2] not found
Вот почему я предполагаю, что у Seleniun неверная реализация XPath.
В соответствии с документами XPath предикат позиции должен фильтровать по позиции в наборе узлов, поэтому он должен найти седьмой input
с name 'question'
. В Selenium это не работает. Селектора CSS (:nth-of-kind
) тоже.
Мне пришлось написать выражение, которое фильтрует своих общих родителей:
//*[contains(@class, 'question_section')][7]//input[@name='question']
Является ли это проблемой Selenium, или я неправильно читаю спецификации? Что я могу сделать, чтобы сделать более короткое выражение?