t.me/atinfo_chat Telegram группа по автоматизации тестирования

Проверка самого XPATH

Теги: #<Tag:0x00007f748b165ba0>

Здравствуйте!

А можно ли в Webdriver проверить только правильность XPATH.

Мне нужно проверить, что таблица содержит определенные колонки.
Я описал ее в виде XPATH:

//table//th[text()="Column1"] and //table//th[text()="Column2"] and //table//th[text()="Column3"] etc.

Проврка через find.element не проходит, потому что, как я понимаю, такой xpath возвращает false или true, а не сам элемент.

Спасибо!

Для проверки XPath удобно пользоваться плагинами к Firefox: FirePath и FireFind.
Для хрома проверить работоспособность XPath можно, набрав в консоли (инструменты разработчика):

$x('<тут идет xpath>')
1 Симпатия

Вам нужно проверить Xpath или что таблица содержит определенные колонки?
Если второе, то по какому признаку требуется проверять колонку? Можно, например, взять текст столбца или ячейки элемента через getText
Есть еще ExpectedConditions которые могут проверить (не)видимость, доступность или просто наличие определенного элемента в DOM.

Нужно проверить определенные колонки. Их много. Я думал про вариант создать список через find_elements, а потом сделать assert на каждое имя колонки, но выходит не очень изящно.

Очень заманчиво выглядит создать один громоздкий XPATH со всеми именами колонок, а потом в тесте один раз вызвать assertTrue. Но вот как бы этот true выдернуть?

joemast, я имел в виду проверить этот xpath в теле теста. Через плагин FirePath я его проверил. Теперь мне нужно убедиться, что таблица с конкретным набором колонок появляется на странице.

Мне показался заманчивым вариант описать всю таблицу с помощью одного xpath. Возможно я не прав, тогда придется делать проверку каждой колонки.

Зачем делать один громоздкий XPath, когда все колонки можно найти по одному простому XPath, подставляя в него имя колонки. И в цикле проверить, что все они есть на странице

3 Симпатий

Пожалуй вы правы, так и сделал.

Но тогда выходит, что использование логики в xpath (and, or) никак нельзя применить в Вебдрайвере, потому что find_element такой xpath не будет понимать? Я прав?

Нет. Вам просто нужно правильно расставить скобки - что бы на выходе получить ноду, а не boolean.

В применении к WebDriver лучше придерживаться максимально простых конструкций локаторов: не использовать selectors (CSS, XPath), если можно использовать id или name, не использовать сложных конструкций селекторов, если можно использовать простые.

AND и OR в XPath-селекторах работают, я помню, когда использовал, у меня работали. Почему у тебя не сработали надо отдельно разбираться.

Кстати, в твоей конструкции //table//th[text()="Column1"] and //table//th[text()="Column2"] and //table//th[text()="Column3"] логическая ошибка. По такому XPath могут быть найдены элементы совершенно разных таблиц, если их на странице несколько. При этом XPath вернет true и тест может дать неправильный результат

Ну, я сознательно упростил конструкцию, чтобы наглядней было. В реале там для каждой таблицы еще свой уникальный элемент.

К сожалению на этом проекте разработчики используют id только для полей ввода. Все остальное в основном div’ы.

Огромное Спасибо!!! Я совсем упустил из виду возможность использовать скобки!