Всем большой привет, кто какие локаторы предпочитает для поиска элементов на странице? Если можно аргументируйте свой ответ.
- ID
- Name
- Linktext
- Tag Name
- Class name
- Css
- Xpath
0 участников
Всем большой привет, кто какие локаторы предпочитает для поиска элементов на странице? Если можно аргументируйте свой ответ.
0 участников
Это вопрос из разряда - какой язык лучше для тестирования? )
В чем собственно проблема?
Хочу понять что лучше использовать, допустим xpath из хромовской тулзы скопировал и порядок, но возникает вопрос насколько это стабильно и правильно ли вообще…
скопировать… вы такого на собеседованиях только не говорите.
CSS selectors почти для всего вместе с чейнингом поиска от элемента к элементу, краткий пример:
let header = $('header')
let loginButton = header.$('button.login')
let registerButton = header.$('button.register')
Брат жив, зависимость есть.
А Xpath - прекрасен для таблиц и каких-то хитровыкрученых моментов в верстке.
благодарю за Ваш ответ.
Почему Вас смутило слово “скопировать”?
Стратегия поиска по CSS работает всегда и во всех браузерах одинаково.
xPath по разному поддерживается, а иногда вообще может некорректно работать.
CSS селектор зачастую проще и лаконичней в записи чем xPath.
xPath гораздо мощнее по возможностям.
Путь по CSS может быть только вглубь (вниз по DOM дереву).
xPath выражения могут обходить DOM как угодно и вверх и вниз.
В скорости поиска тоже есть разница, но она мизерная. СSS чуток быстрее везде, кроме браузера Internet Explorer, в котором xPath отрабатывает быстрее.
Кроме того, findById, findByName, findByClassName внути селениума все равно преобразуются в findByCssSelector, тоесть они вообще эквивалентны.
В общем и целом CSS вполне достаточно везде. Когда CSS недостаточно, можно использовать xPath, но надо понимать, что он может по разному работать в IE и в Chrome.
xpath из хромовской тулзы скопировал и порядок
Непорядок вобщем-то )) Не думаю, что такой локатор, особенно если внутри его есть индексы, переживет изменения в верстке на следующем апдейте. Хотя тулзы разные есть. Тут скорее непорядок в том, что нужно понимать что ты делаешь, а не бездумно копировать и вставлять.
Собственно Ярослав уже ответил, локаторы с индексами могут стать неработоспособными после верстки страници.
Благодарю за полный ответ, теперь все ясно и понятно.
позволяют также
<div ng-controller="myCtrlr">
<h1>Welcome to my book store</h1>
<div style="width: 100%; overflow: scroll;">
<div ng-repeat="person in people" ng-class="{even: !$even, odd: !$odd}">
<span>{{person.Name}}</span>
<span> {{person.Country}}</span>
</div>
</div>
</div>
можно
ngDriver.findElements(NgBy.repeater("person in people"))
и
NgBy.binding("person.Name")
и напр.
WebElement personName = new NgWebElement(ngDriver, currentElement)
.findElement(NgBy.binding("person.Name"));
Object personCountry = new NgWebElement(ngDriver, currentElement)
.evaluate("person.Country");
if (personName.getText().indexOf("Centro comercial Moctezuma") >= 0) {
assertThat(personCountry.toString(), containsString("Mexico"));
highlight(personName);
}
Как правило, самые надежные селекторы - это ID и ClassName. Я в основном использую коллекцию из className и кликаю по индексу
Это только в том случае, если ваши программисты тоже надежные как скала)))
П.С. ID(“myId”) и ClassName(“myClass”). Все равно транслируются селениумом в cssSelector("#myId") и cssSelector(".myClass") соответственно.
Кликать по индексу в колекции? Вы серьёзно?
Один лишний элемент в коллекции появляется - и нужно переписать ВСЕ индексы. Или я что-то упускаю?
Как показывает практика, тестирование фронта - дело вообще не благодарное))
И если уж на то пошло, то кроме ID-шников и ухватиться то не за что. Все меняется постоянно.
Да и айдишники иногда меняются
Для задач автоматизации веб тестирования нужно утвердить айдишки или дата-атрибуты которые обязательно должны быть у элементов страниц для улучшения тестируемости вашего приложения.
Так что если вы не договорились с разработчиками об этом, это нужно сделать (договориться), чтобы потом говном друг в друга не бросаться
Иногда бывает, когда договариваться уже поздно. У меня такое было.
меня очень сильно выручает добавление уникального ключа. И xpath выглядит просто и со вкусом
<div class="_sidebarMenu_r9khk_9" data-test="sidebarMenu">
а так выглядить поиск по xpath
'//div[@data-test="sidebarMenu"]'
Это удобно тем, что короче запись, легче читается, быстрее ищется и куча еще плюсов.
Но вы должны понимать, что нужно это добавлять в тело проекта.
P.S. на рефакториннг уходит гораздо меньше времени, так как изменение dom ни как не затрагивает такие простые записи