Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

locators
Теги: #<Tag:0x00007f7b63077368>

(Evpaty Kolovrat) #1

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

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

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

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

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

Спасибо!


(Александр Таранков) #2

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

$x('<тут идет xpath>')

(Keiga) #3

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


(Evpaty Kolovrat) #4

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

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


(Evpaty Kolovrat) #5

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

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


(Александр Таранков) #6

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


(Evpaty Kolovrat) #7

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

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


(vmaximv) #8

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


(Александр Таранков) #9

В применении к 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 и тест может дать неправильный результат


(Evpaty Kolovrat) #10

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

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


(Evpaty Kolovrat) #11

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