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

Как ведет себя Selenide в случае StaleElementReference Exception на child элементе?

locators
selenide
java
webdriver
Теги: #<Tag:0x00007f9c4fdd0b60> #<Tag:0x00007f9c4fdd0980> #<Tag:0x00007f9c4fdd0818> #<Tag:0x00007f9c4fdd0638>

(Viktor) #1

Привет!
Так как сейчас странички динамичны, довольно часто возникает ошибка StaleElementReference. И даже если вы ее обрабатываете и заново ищите элемент, ошибка всеравно может возникнуть в момент клика (очень редкий случай, но он бывает)

Вот например конструкция на Selenide:
$$(“selector”).get(1).findAll(“selector”).get(3).click();
Что произойдет если эта ошибка возникнет на клике? По идее он с самого начала должен выполнить все цепочку поиска, или этот случай не обрабатываается?


(asolntsev) #2

Обрабатывается.

  1. Вся цепочка ДО клика $$(“selector”).get(1).findAll(“selector”).get(3) не делает вообще ничего. Не ищет никаких элементов.
  2. А вот когда вы вызываете click(), селенид в цикле:
    • while (прошло меньше 4 секунд)
      • найти элемент и кликнуть
      • если поиск+клик прошёл без ошибок - выходим из цикла

(Viktor) #3
  1. А можете кинуть ссылку на класс где находится этот while?
  2. Мы по сути работаем не с существующим веб элементом, это не обертка на webelement как описано в спецификации, а скорее локатор?

(asolntsev) #4
  1. https://github.com/selenide/selenide/blob/master/src/main/java/com/codeborne/selenide/impl/SelenideElementProxy.java, метод dispatchAndRetry.
  2. Да, вроде получается так. Хотя для конечного потребителя нет разницы.
    P.S. Создать обёртку тоже можно:
  WebElement we = ...;
  SelenideElement se = $(we);

(Viktor) #5

Спасибо! Просто сейчас думаю как реализовать обработку подобного поведения на C# в простом варианте. Не думали перенести Selenide на C#?


#6

Не порт, а запуск родного селенида в c# окружении:
https://seleniumcamp.com/talk/using-selenide-on-c-net/


(asolntsev) #7

Да, был доклад об этом: https://seleniumcamp.com/talk/using-selenide-on-c-net/


(Viktor) #8

Да видел, а полноценная реализация как например webdriver на C# или selenidejs на js не планируется?


(asolntsev) #9

Лично я пока не планировал делать - мне незачем. На C# пока не программирую.

Но есть ещё такая библиотека: https://github.com/yashaka/NSelene


(Viktor) #10

О, он же и писал selenidejs, спасибо