Все зависит от того, что на самом деле содержит ваш HTML, но ваш tr[contains(.,'hello')]/td
XPath-селектор означает " первая ячейка первой строки, которая содержит строку 'hello' в любом месте внутри нее " (или, более того,точно, " первый элемент TD в элементе TR, который содержит строку 'hello' в любом месте внутри него ", поскольку Selenium не имеет представления о том, что на самом деле делают задействованные элементы).Вот почему это дает неправильный результат, когда есть строки, содержащие «hello» и «hello1» - обе содержат «hello».
Селектор tr[. ='hello']/td
будет более точным, но это немного необычно (потому что HTMLЭлементы TR не должны содержать текст - текст должен быть в элементах TH или TD внутри TR), и, вероятно, он не будет работать (потому что текст в любых других ячейках нарушит сравнение). Вы, вероятно, хотите tr[td[.='hello']]/td
, что означает « первый элемент TD, содержащийся в элементе TR, который содержит элемент TD со строкой 'hello' в качестве полного текста ".