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

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

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

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

  1. Вся цепочка ДО клика $$(“selector”).get(1).findAll(“selector”).get(3) не делает вообще ничего. Не ищет никаких элементов.
  2. А вот когда вы вызываете click(), селенид в цикле:
    • while (прошло меньше 4 секунд)
      • найти элемент и кликнуть
      • если поиск+клик прошёл без ошибок - выходим из цикла
  1. А можете кинуть ссылку на класс где находится этот while?
  2. Мы по сути работаем не с существующим веб элементом, это не обертка на webelement как описано в спецификации, а скорее локатор?
  1. selenide/SelenideElementProxy.java at main · selenide/selenide · GitHub, метод dispatchAndRetry.
  2. Да, вроде получается так. Хотя для конечного потребителя нет разницы.
    P.S. Создать обёртку тоже можно:
  WebElement we = ...;
  SelenideElement se = $(we);

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

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

1 лайк

Да, был доклад об этом: Using Selenide on C# .NET

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

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

Но есть ещё такая библиотека: GitHub - yashaka/NSelene: Consise API to Selenium for .Net (the port of Selene in python / Selenide in Java)

1 лайк

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