2016-12-26 3 views
2

Я пытаюсь использовать функцию XPath , которая имеет строку в 2 частях, но она бросает «недействительный xpath выражение "при оценке.Я пытаюсь использовать функцию XPath contains(), которая имеет строку в 2 частях, но она бросает неверную ошибку xpath

Вот что я пытаюсь достичь:

Нормальное XPath:

//*[contains(text(),'some_text')] 

Теперь я хочу, чтобы разбить его на 2 части как некоторый случайный текст заполняемых между:

//*[contains(text(),'some'+ +'text')] 

То, что я сделал, это использовать '+' '+' для конкатенации строки в выражении, как в Java. Пожалуйста, предложите, как я могу это преодолеть.

ответ

1

Вы можете объединить 2 в одно выражение предиката для проверки, если текстовый узел содержит 2 конкретные подстроки:

//*[text()[contains(.,'some') and contains(.,'text')]] 

demo

Если вам нужно быть более конкретным, убедившись, что 'text' приходит где-то после 'some' в текстовый узел, тогда вы можете использовать комбинацию substring-after() и , как показано ниже:

//*[text()[contains(substring-after(.,'some'),'text')]] 

demo

Если каждый из целевых элементов всегда содержит один текстовый узел, или если только первый текстовый узел должен быть рассмотрен в случае нескольких текстовых узлов, найденные в элементе, то выше XPath можно упростить следующим образом:

//*[contains(substring-after(text(),'some'),'text')] 
+0

Ничего себе. Это был жемчужина ответа. До сути и до сих пор через объяснение. Спасибо. – SelThroughJava