2016-12-08 4 views
3

В чем разница между //div[contains(text(),'abc')] и //div[contains(.,'abc')]?Использование содержит в Selenium XPath

Is "." здесь используется как регулярное выражение, означающее любой текст, начинающийся с abc?

+2

Возможная Дубликат [XPath: разница между точкой и текстом()] (http://stackoverflow.com/questions/ 38240763/XPath-разница между ними-точка-и-текст) – Guy

ответ

2

Тест text() выбирает всех дочерних узлов текстового узла контекстного узла.

Точка (.) выбирает сам контекстный узел.

В качестве аргументов в contains() функции, как . и text() интерпретируются как string value с, что конкатенация всех дочерних текстовых узлов (см "Element Nodes"):

Строковое значение узла элемента есть конкатенация строковых значений всех потомков текстовых узлов узла элемента в порядке документа.

В случае text() результат вычисляется как конкатенация всех значений прямого текстового узла. В случае . текстовые значения всех текстовых узлов потомков объединены.

Рассмотрим это:

<html> 
    <body> 
    <div>abc</div> 
    <div>444 <span>abc</span></div> 
    <div>def</div> 
    <div>123 abc</div> 
    </body> 
</html> 

//div/text() выбирает следующее:

  • "ABC"
  • "444"
  • "DEF"
  • "123 ABC".

//div/.:

  • "ABC"
  • "444 ABC"
  • "DEF"
  • "123 ABC"

Таким образом, //div[contains(text(),'abc')] выбирает только два div с:

<div>abc</div> 
<div>123 abc</div> 

в то время как //div[contains(.,'abc')] выбирает все div с с текстовым узлом, содержащий abc:

<div>abc</div> 
<div>444 <span>abc</span></div> 
<div>123 abc</div> 
Смежные вопросы