В чем разница между //div[contains(text(),'abc')]
и //div[contains(.,'abc')]
?Использование содержит в Selenium XPath
Is "." здесь используется как регулярное выражение, означающее любой текст, начинающийся с abc
?
В чем разница между //div[contains(text(),'abc')]
и //div[contains(.,'abc')]
?Использование содержит в Selenium XPath
Is "." здесь используется как регулярное выражение, означающее любой текст, начинающийся с abc
?
Тест 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()
выбирает следующее:
//div/.
:
Таким образом, //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>
Возможная Дубликат [XPath: разница между точкой и текстом()] (http://stackoverflow.com/questions/ 38240763/XPath-разница между ними-точка-и-текст) – Guy