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

Не находит по xPath-у, хотя на странице он есть

Теги: #<Tag:0x00007f9afed5caa0> #<Tag:0x00007f9afed5c9b0> #<Tag:0x00007f9afed5c8c0>

Проблема такого рода, есть xPath (Так как html генерируется автоматом и криво + динамические ID) ищу способ сократить и оптимизировать локаторы.
Пока что пришел только к такому виду

   driver.findElement(By.xpath("//a[text()=' Настройка услуг ']")).click();

И при этом выдает ошибку, вот такого рода:

    org.openqa.selenium.InvalidSelectorException: The xpath expression '//a[text()=' пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ ']' cannot be evaluated or does notresult in a WebElement (WARNING: The server did not provide any stacktrace information)

Thread.sleep(3000) уже ставил, не помогает

Кирилица не нравится может?

тут слип ничем не поможет, подберите другой локатор, желательно на латинице(соглашусь с постом выше)

Я б с удовольствием, но с таким DOM-ом это не просто:

<div class="GIAU1ENBMO GIAU1ENBNO" style="position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px;">
<div style="position: absolute; z-index: -32767; top: -20ex; width: 10em; height: 10ex; visibility: hidden;" aria-hidden="true"/>
<div style="position: absolute; overflow: hidden; left: 0px; top: 0px; right: 0px; bottom: 0px;"><div id="gwt-uid-30" class="accordion" style="position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px;"><div class="accordion-group" style="">
<div class="accordion-heading selected-menu-item">
<a id="gwt-uid-32" class="accordion-toggle collapsed" href="#gwt-uid-31" data-toggle="collapse" data-parent="#gwt-uid-30">
<i class="icon-folder-open"/> Настройка услуг </a></div>

Все ID динамические, и атрибуты скачут постоянно.
И даже если искать по статическому атрибуту, то зачастую на ходит больше 1-го. Пока приходится писать xPath-ы типа:

//div[2]/div[4]/div//div[2]//div/table/tbody/tr[3]

что б находило только один элемент, но понимаю, что потом будет тяжело ориентироваться и т.д.
Так что нужен выход…

можно попробовать искать от соседних элементов, например:

//a[contains(@class, 'accordion-toggle')]
//i[@class='icon-folder-open']

либо, как уже говорилось, можно попросить разработчиков добавить уникальных индификаторов (уникальный текст в @id, @class, etc) для элементов

2 Симпатий

по рукам таким разработчикам))
ради интереса может глянуть, что selenium IDE за набор локаторов выдаст, если вручную тяжеловато

пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ ']' cannot be evaluated or does notresult in a 

Кирилица не нравится может?      

Кто-нибудь знает как это фиксаеться ?
Code page ?
или в проэкте настройки ?

если тестируемая система имеет несколько локализаций - то подобные локаторы будут работать только на одной локале.

IDE выдает все варианты привязаны к id, только xpath:position выдает (похожий)как у меня

  //div[2]/div/div/div/a

Это я знаю. Это я так ищу какие варианты пока возможны.

Предлагаю топик-стартеру проверить например такой локатор //*[1] и, естественно, в том браузере, в котором он получил этот экcепшен (то бишь IE).

Неплохо было бы глянуть на кодировку текста исходников проекта (в частности файла в котором встречается кириллица)

Если проблема с кодировкой и xpath не хочет воспринимать кирилицу то можно попробовать сделать метод, который будет принимать текст, искать все элементы через findElements, удовлетворяющие xpath:

А потом через перебор возвращать тот, который содержит твой текст, а может и кликать :smile:
p.s. Кстати может оказаться так что тебе нужно будет кликать не на ссылку, а на иконку.