Как я могу выбрать указанные c дочерние узлы с xpath? - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь автоматизировать поиск элементов в строке таблицы с помощью Katalon + XPath. У меня есть таблица html, и я хотел бы найти правильную строку, которая удовлетворяет моим критериям.

Моя первая попытка была:

//*[starts-with(@id,\'MessageList_DXDataRow\')]/td[2] [text()='SomeSearchValue'] and td[3][contains(text(), 'SomeString')]

Но добавление просто "и" приведет к он возвращает с логическим значением: false.

Так что я изменил его так:

//*[starts-with(@id,'MessageList_DXDataRow')]/*[self::td[2][text()='SomeSearchValue'] and self::td[3][contains(text(), 'SomeString')]]

Но он ничего не находит.

Как вы можете видеть, я бы нравится искать фиксированное значение в td [2] и подстроку в td [3].

Редактировать:

Связанное html:

<table>
<tbody>
    <tr id="MessageList_DXDataRow0" class="dxgvDataRow table-row share row-navigable" style="font-weight: bold;">
        <td class="dxgv">FirstColumn</td>
        <td class="dxgv">SecondColumn</td>
        <td class="message-content dxgv">ThirdColumn</td>
        <td class="dxgv">FourthColumn</td>
        <td class="dxgvCommandColumn dxgv dx-ac">FifthColumn</td>
    </tr>
    <tr id="MessageList_DXDataRow1" class="dxgvDataRow table-row share row-navigable" style="font-weight: bold;">
        <td class="dxgv">FirstColumn</td>
        <td class="dxgv">SecondColumn</td>
        <td class="message-content dxgv">ThirdColumn</td>
        <td class="dxgv">FourthColumn</td>
        <td class="dxgvCommandColumn dxgv dx-ac">FifthColumn</td>
    </tr>

Как я могу заставить это работать?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Пока неясно, хотели ли вы условие ИЛИ или И.

Это выберет строку, в которой выполняется условие td [2] или условие td [3]:

//tr[starts-with(@id,'MessageList_DXDataRow')][./td[2][.="SecondColumn"] or ./td[3][contains(.,"Third")]]

Это выберет строки, в которых выполняются условия td [2] и td [3]:

//tr[starts-with(@id,'MessageList_DXDataRow')][./td[2][.="SecondColumn"] and ./td[3][contains(.,"Third")]]
0 голосов
/ 29 апреля 2020

Я понял это.

Решение, которое я искал, выглядит примерно так:

(//*[starts-with(@id,'MessageList_DXDataRow')]/td[2][text()='SecondColumn']/following-sibling::td[1][contains(text(), 'Third')])[1]'
...