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