Да, Until возвращает IWebElement, не просто ждёт.
ваш екстеншн FindElementExt написан хорошо, только ждет всего 5 секунд))
если вы весь try catch обернете в цикл и логику из catch перенесете в условие цикла, может заработать))
Кстати, можете ловить любой ексепшн и логировать его - для отладки
Только этот велосипед уже давно написан внутри Until)
Сори, был неправ, использую кастомную обертку над селениумом, начал немного забывать))
Но условие if (++attempt == 7) - не имеет смысла, так как ++attempt всегда равно 1
Да, не имеет, я поэтому и написал сразу готовый пример, чтоб не мучалась
Спасибо большое всем за помошь, спасибо что вы есть Сорри. что сразу не ответила, ушла с головой в фиксы. Благодаря переходу на protractor + несколько улучшений в ожиданиях, тесты ускорили почти в 2 раза. Учитывая что некоторые их них были почти по 45 минут, а сейчас 20 - это существенная победа.
Ждет пока Angular “успокоится”, это и есть селениум, просто обертка на драйвер
и с A6 тоже или только с AngularJS?
Если сайт на последних версиях по идее должен работать, можете сами попробовать затестить, я выше простенький пример кидал, просто урлу свою вставьте и локаторы
судя по истории коммитов в GitHub - angular/protractor: E2E test framework for Angular apps (protractor/clientsidescripts.js at master · angular/protractor · GitHub год назад последний раз) наоборот умер он похоже или к тому идет
Пока есть Angular, будет и Protractor. Это специально они запилили. Вы же сами выше на Protractor ссылались
я им занимался оч двано даже порт на жава сделал не такой поп как у пола х но тоже супер хороший… потом что то стали появляться новости что (он тогда был 2 потом 4 и 6 ) йок
проверять времени не было
Подниму вопрос. Столкнулась с такой проблемой. если элемент не существует, происходит несклько попыто най
У меня еще одна не большая проблема. Если элемент не существует, происходит попытка его найти и тест падает. Но элемента в данном случае нет закономерно, т.е. он существуент в одних тестовых случаях и не существует в других.
Я делаю так, но этот дисплей игнорится и падает при поиске
if (ManufactPart.ddlMachine.Displayed)
{
ManufactPart.ddlMachine.SendKeys(machine);
}
Ну это же просто основы Selenium…
Неужели народ настолько обленился, что элементарную вещь не в состоянии загуглить?
Честное слово, это просто сюр какой-то!
Да тут даже простой логикой можно вывести проблему…
Displayed вызывается у экземпляра класса, а для того чтобы этот экземпляр был - его надо создать.
А для создания надо найти элемент. Выходит. он не найден ~_~
В чем ваша проблема-то? Естественно тест упадет, если элемент не найден через метод FindElement()
Для того, чтобы он не падал, надо при исключении NoSuchElementFoundException
возвращать какой-то результат, а не прокидывать исключение.
Вот как вам лень дочитать до конца и псмотреть скрин, так и мне гуглить
у меня есть catch для эксепшинов и нет ошибки NoSuchElementFoundException .Падает не пойму почему. Перевела тесты на netcore2.2 и все развалилось
Ну если вам лень гуглить свои ошибки или хотя бы приводить стек ошибки - то сами и решайте её.
И да, исходя из кода приведенного выше в теме, у вас нет catch в том месте, где оно может возникнуть.
Примерно так выглядит метод, где есть Try-Catch :
public static void WaitForElementPresent(this IWebElement element, Driver driver, int time = 0)
{
Thread.Sleep(TimeSpan.FromSeconds(time));
var wait = driver.GetNewWebDriverWait();
try
{
wait.Until(dr => element.Displayed);
}
catch (WebDriverTimeoutException wte)
{
Logger.Info($"Timeout during wait. Exception: {wte.Message}");
}
}
У вас второй части, где ловится Exception не видно на скриншоте.
Уберите ваши трай кетчи из поиска) Вся логика уже есть внутри Wait
просто добавьте исключение которое хотите игнорить в список
wait.IgnoreExceptionTypes(typeof(StaleElementReferenceException), typeof(NoSuchElementException), typeof(NoSuchElementFoundException ));