XPath для доступа к тексту после промежутка - PullRequest
0 голосов
/ 19 октября 2018

Я использую Robot Framework, пытаясь получить доступ к элементу в динамической таблице.Я пытаюсь нажать на текст «TestAuto», который приведет меня на другую страницу, но у меня большие трудности.Я всегда борюсь, когда "код" находится в коде.Надеюсь, кто-нибудь может дать мне указатель для создания правильного xpath.Благодарю.

Ниже приведен пример кода:

<!DOCTYPE html>
<html>
<body>

<h1>My First Heading</h1>

<p>My first paragraph.</p>

<div class="col-sm-2">
<table>
<tbody>
<tr data-tryxpath-element="0">
<td class="st-m3">
<span class="bongobongo">Name:</span>
TestAuto
<br>
<span class="bongoemail">Email:</span>
bongo@mail.com
<br>
<span class="bongotel">Phone:</span>
+1234567890
</td>
</tbody>
</table>
<table>
<tbody>
<tr data-tryxpath-element="0">
<td class="st-m3">
<span class="bongobongo">Name:</span>
TestManual
<br>
<span class="bongoemail">Email:</span>
bongo123@mail.com
<br>
<span class="bongotel">Phone:</span>
+1234567891
</td>
</tbody>
</table>
</div>
</body>
</html>

Я пробовал следующие xpaths с отрицательными результатами:

//div/table/tbody/tr/td[starts-with(@class,'table borderless mobile-list')] --> Useless anyway as it does not help to identify "TestAuto"
//div/table/tbody/tr/td//text()="TestAuto" --> Both tables are selected
//div/table/tbody/tr/td[normalize-space()='TestAuto'] --> Both tables are selected
//div/table/tbody/tr/td/span/following::text()="TestAuto" --> Both tables are selected

1 Ответ

0 голосов
/ 19 октября 2018

Любой текстовый узел после <span> под тем же родителем:

//div/table/tbody/tr/td/span/following-sibling::text()

Любой текстовый узел со значением "TestAuto" после <span> под тем же родителем:

//div/table/tbody/tr/td/span/following-sibling::text()[. = "TestAuto"]

Любой первый текстовый узел со значением "TestAuto" после <span> под тем же родителем:

//div/table/tbody/tr/td/span/following-sibling::text()[1][. = "TestAuto"]

Любой текстовый узел со значением "TestAuto" немедленно после <span> под тем же родителем:

//div/table/tbody/tr/td/span/following-sibling::node()[1][self::text() and . = "TestAuto"]

... в первом <table> только под <div> (это все еще несколько совпадений, если естькратно <div> с!):

//div/table[1]/tbody/tr/td/span/following-sibling::text()[1][. = "TestAuto"]

... только самое первое вхождение во всем документе (максимум одно совпадение):

(//div/table/tbody/tr/td/span/following-sibling::text()[1][. = "TestAuto"])[1]

Примечание Возможно, вам придется использовать normalize-space(.) = "TestAuto" вместо . = "TestAuto", чтобы обрезать пробелы, которые могут быть в исходном коде.

...