2016-10-20 3 views
0

Я автоматизирую веб-систему с использованием веб-сервера selenium, в нескольких сценариях Мне нужно утверждать, что данные в одной строке (tr) веб-страницы.xpath selector tr заданный список данных

Например, мне нужно утверждать, что есть в системе линии (TR) с этими данными: Data 1, Data 2, Data 3, данные 4

И моя страница структурирована следующим образом:

<tr> 
    <td>Data 1</td> 
    <td>Data 2</td> 
    <td>Data 3</td> 
    <td><span class='something'>Data 4</span></td> 
<tr> 

Я написал этот XPath надеясь, что это вернет строку таблицы:

.//tr[td[text()='Data 1']]/parent::tr/td[text()='Data 2']/parent::tr/td[text()='Data 3']/parent::tr/td[text()='Data 4'] 

он работает до тех пор, Data 3 но в 4 данных не работает

+0

Дубликат [Тестирование текстовых() узлов и строковых значений в XPath] (http://stackoverflow.com/questions/34593753/testing-text-nodes-vs-string-values-in-xpath) – kjhughes

ответ

0

Я хотел бы решение, которое является общим в точке встречи любого уровня в моей тд

Вы должны попробовать using . instead of text(), который будет общим решением, как показано ниже: -

.//tr[td[.='Data 1'] and td[.='Data 2'] and td[.='Data 3'] and td[.='Data 4']] 

Или, если вы хотите, начальные и конечные пробелы, а также попробовать использовать normalize-space() функцию xpath, как показано ниже: -

.//tr[td[normalize-space()='Data 1'] and td[normalize-space()='Data 2'] and td[normalize-space()='Data 3'] and td[normalize-space()='Data 4']] 
+1

вот что я искал, спасибо –

0

Это не работает, потому что есть элемент <span>, встроенный в 4-й <td>.

Вы должны попробовать

.//tr[td[text()='Data 1']]/.../parent::tr/td[.='Data 4'] 

или

.//tr[td[text()='Data 1']]/.../parent::tr/td[span[text()='Data 4']] 
+0

Получил это, но я не могу предвидеть, будет ли тег внутри, содержащий мои данные, или нет, поэтому я хотел бы, чтобы решение было общим в точке соответствия любому уровню внутри моего td. –

+0

В этом случае используйте dot ('.') вместо' text() ' – Andersson

0

Попробуйте использовать этот XPath, я думаю, что он будет работать в вашем случае:

.//tr[.//*[.='Data 1'] and [.='Data 2'] and [.='Data3'] or [.='Data 4']] 

Он будет искать узел tr, содержащий дочерний элемент, содержащий этот текст.