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

C# проблема с поиском элемента и ожиданием

csharp
xpath
locators
webdriver
selenium
Теги: #<Tag:0x00007f21d80bdde8> #<Tag:0x00007f21d80bdac8> #<Tag:0x00007f21d80bd7a8> #<Tag:0x00007f21d80bd1e0> #<Tag:0x00007f21d80bcc90>

(Lelik) #17

Попробовала . Первые потери:

  1. Не поддерживается Allure ScreenShort
  2. Мне нужно перейти в другое окно , в котором немножко другая имплементация.
    В итоге ошибка
Message: OpenQA.Selenium.WebDriverException : javascript error: angular never provided resumeBootstrap
JavaScript stack:
Error: angular never provided resumeBootstrap
    at check (eval at executeAsyncScript (:448:5), <anonymous>:33:15)
    at eval (eval at executeAsyncScript (:448:5), <anonymous>:38:1)
    at eval (eval at executeAsyncScript (:448:5), <anonymous>:38:12)
    at executeAsyncScript (<anonymous>:448:26)
    at <anonymous>:464:29
    at callFunction (<anonymou

(Viktor) #18
  1. Там где отдаете алюру драйвер сделайте так Driver.WrappedDriver - это драйвер который вы завернули в NgDriver, и делайте так если что то не работает с NgDriver

  2. Driver.IgnoreSynchronization = true; делайте там где angular не работает, и false - там где все ок

  3. Если многопроблем с NgDriver, можете его вобще убрать, но стабильность немного упадет (Это касается только Angular сайтов)


(Dmitrij Abashin) #19

наверно должно быть так


(Viktor) #20

Так как у меня тоже можно, от перестановки мест слагаемых как говорится) И лишний поиск убирается


(Dmitrij Abashin) #21

Да, Until возвращает IWebElement, не просто ждёт.


(Юрий Аксютин) #22

ваш екстеншн FindElementExt написан хорошо, только ждет всего 5 секунд))
если вы весь try catch обернете в цикл и логику из catch перенесете в условие цикла, может заработать))
Кстати, можете ловить любой ексепшн и логировать его - для отладки


(Viktor) #23

Только этот велосипед уже давно написан внутри Until)


(Юрий Аксютин) #24

Сори, был неправ, использую кастомную обертку над селениумом, начал немного забывать))
Но условие if (++attempt == 7) - не имеет смысла, так как ++attempt всегда равно 1


(Viktor) #25

Да, не имеет, я поэтому и написал сразу готовый пример, чтоб не мучалась


(Lelik) #26

Спасибо большое всем за помошь, спасибо что вы есть :slight_smile: Сорри. что сразу не ответила, ушла с головой в фиксы. Благодаря переходу на protractor + несколько улучшений в ожиданиях, тесты ускорили почти в 2 раза. Учитывая что некоторые их них были почти по 45 минут, а сейчас 20 - это существенная победа.


(Сергей Кузьмин) #27

@lelik инткресно расскажите что такое protractor умее что selenium неумее


(Viktor) #28

Ждет пока Angular “успокоится”, это и есть селениум, просто обертка на драйвер


(Сергей Кузьмин) #29

и с A6 тоже или только с AngularJS?


(Viktor) #30

Если сайт на последних версиях по идее должен работать, можете сами попробовать затестить, я выше простенький пример кидал, просто урлу свою вставьте и локаторы


(Сергей Кузьмин) #31

судя по истории коммитов в https://github.com/angular/protractor (https://github.com/angular/protractor/blob/master/lib/clientsidescripts.js год назад последний раз) наоборот умер он похоже или к тому идет


(Viktor) #32

Пока есть Angular, будет и Protractor. Это специально они запилили. Вы же сами выше на Protractor ссылались


(Сергей Кузьмин) #33

я им занимался оч двано даже порт на жава сделал не такой поп как у пола х но тоже супер хороший… потом что то стали появляться новости что (он тогда был 2 потом 4 и 6 ) йок

проверять времени не было


(Lelik) #34

Подниму вопрос. Столкнулась с такой проблемой. если элемент не существует, происходит несклько попыто най


(Lelik) #35

У меня еще одна не большая проблема. Если элемент не существует, происходит попытка его найти и тест падает. Но элемента в данном случае нет закономерно, т.е. он существуент в одних тестовых случаях и не существует в других.
Я делаю так, но этот дисплей игнорится и падает при поиске
if (ManufactPart.ddlMachine.Displayed)
{
ManufactPart.ddlMachine.SendKeys(machine);
}


(Alexandr D.) #36

Ну это же просто основы Selenium…
Неужели народ настолько обленился, что элементарную вещь не в состоянии загуглить?
Честное слово, это просто сюр какой-то!

Да тут даже простой логикой можно вывести проблему…
Displayed вызывается у экземпляра класса, а для того чтобы этот экземпляр был - его надо создать.
А для создания надо найти элемент. Выходит. он не найден ~_~

В чем ваша проблема-то? Естественно тест упадет, если элемент не найден через метод FindElement()

Для того, чтобы он не падал, надо при исключении NoSuchElementFoundException возвращать какой-то результат, а не прокидывать исключение.