У меня есть следующее выражение XPath, которое я вызываю из селена (технически из splinter, который вызывает селен):

//label[text()="data"]/following-sibling::div/input|//label[text()="data"]/following-sibling::div/textarea

Есть ли способ упростить это выражение? Следующее не работает в селене, хотя, похоже, работает в AquaPath:

//label[text()="data"]/following-sibling::div/(input|textarea)
4
Lorin Hochstein 19 Дек 2012 в 05:01
Не могли бы вы, пожалуйста, показать нам свой html-код?
 – 
Abhishek_Mishra
19 Дек 2012 в 09:06
Lorin, мой ответ был вам полезен, или у вас все еще есть проблемы? Я только что сделал обновление, показав, как написать компактное выражение, когда есть значительное количество альтернатив.
 – 
Dimitre Novatchev
19 Дек 2012 в 21:40
Да, это было полезно. В моем случае у меня есть только две альтернативы, поэтому исходное решение работает хорошо.
 – 
Lorin Hochstein
19 Дек 2012 в 22:06

1 ответ

Лучший ответ

< Сильный > Попробуйте :

//label[text()="data"]/following-sibling::div/*[self::input or self::textarea]

Если вариантов много (более трех), такое выражение будет значительно короче:

someExpr/*[contains('|name1|name2|name3|name4|', concat('|',name(), '|'))]
4
Dimitre Novatchev 19 Дек 2012 в 21:38