c# Selenium RC оператор ИЛИ с использованием xpath

В настоящее время я разрабатываю несколько тестов с использованием Selenium RC. У меня возникла проблема с оператором selenium Xpath «ИЛИ» с вводом xpath и текстовыми областями. Переходим к делу. Я разработал 2 xpaths

текстовая область: //span[text()='{0}']/parent::*/following-sibling::*//textarea

ввод: //span[text()='{0}']/parent::*/following-sibling::*//input

Обычно я использую Selenium.Type(myXpath,"label=myValue"); и оба этих xpaths работают нормально. Проблема в том, что я пытался их объединить. Для меня на самом деле не имеет значения, является ли это вводом или текстовой областью, поскольку оба метода делают одно и то же, поэтому я попытался объединить их с помощью | (или) заявление.

//span[text()='{0}']/parent::*/following-sibling::*//textarea|//input

но, к сожалению, это не работает. Если порядок //textarea|//input, он соответствует текстовой области, а если //input|//textarea, он соответствует вводам. Пробовал разные комбинации и ничего. Мне не хватает скобок или необходимого синтаксиса? Спасибо за помощь.


person Shuffler    schedule 21.02.2013    source источник


Ответы (1)


Извлеките все узлы (*), затем проверьте имена элементов на наличие тех, которые вам нужны, используя предикаты.

//span[text()='{0}']/parent::*/following-sibling::*//*[local-name() = 'textarea' or local-name() = 'input']

Если ваш движок XPath не поддерживает local-name() (что, похоже, проблема с Selenium, см. комментарии), вам придется повторить полный оператор:

//span[text()='{0}']/parent::*/following-sibling::*//textarea | //span[text()='{0}']/parent::*/following-sibling::*//input

Запрос, который вы пытались использовать, эквивалентен

(//span[text()='{0}']/parent::*/following-sibling::*//textarea) | (//input)

Что также объясняет результаты переключения textarea и input.

person Jens Erat    schedule 21.02.2013
comment
К сожалению, это не работает для меня. Я получаю сообщение об ошибке: Selenium.SeleniumException: ОШИБКА: Недопустимый xpath [3]: Ошибка синтаксического анализа XPath //span[text()='Uwagi']/parent::*/following-sibling::*//(textarea |input): // RelativeLocationPath // Expr - person Shuffler; 21.02.2013
comment
Извините, пропустил, нам лучше использовать XPath 1.0 для Selenium. Обновил ответ, теперь он должен работать нормально. - person Jens Erat; 21.02.2013
comment
Я получаю сообщение об ошибке сервера, еще не реализовано: функция Xpath local-name() - person Shuffler; 21.02.2013
comment
Если вы не используете пространства имен, попробуйте использовать вместо них name(). Если и это не сработает, вам придется повторить весь оператор XPath после |. - person Jens Erat; 21.02.2013
comment
К сожалению, имя тоже не сработало. Я смотрю на пространства имен Xpath и смотрю, могу ли я сделать его более элегантным. Пока я просто использовал | с обоими xpaths. Спасибо за ваше время и помощь. Ваше здоровье! - person Shuffler; 21.02.2013
comment
Попробуйте обновиться до последней версии и в противном случае написать отчет об ошибке в Selenium. ;) - person Jens Erat; 21.02.2013
comment
Можете ли вы дать мне несколько советов по обновлению до последней версии? Должен ли я как-то обновить xpath в браузере? Извините, если это глупый вопрос, я совершенно новичок в этом. Мой Rc-сервер версии 2.30, если это имеет значение. - person Shuffler; 21.02.2013
comment
Селен вообще не знаю. Сравните свою версию с той, что на их сайте. Возможно, они расширили поддержку XPath с каким-то обновлением. Если они используют механизм XPath вашего браузера, все, что вы можете сделать, это обновить свой браузер (что, конечно, плохо для тестирования старых версий браузера). - person Jens Erat; 21.02.2013