Перейти к содержимому

Фотография

Рекурсия при WebDriverTimeoutException

selemium frame WebDriverWait WebDriverTimeoutException

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 9

#1 Dmitriy_BOL

Dmitriy_BOL

    Новый участник

  • Members
  • Pip
  • 29 сообщений


Отправлено 12 февраля 2017 - 08:38

Привет всем для кого лень двигатель прогресса.

Те, кто посмотрят мои публикации, увидят очень странные вопросы с моей стороны и очень хорошие ответы со стороны комментаторов.

В компании, которой я работаю, использовали webforms и Web UI Telerik для написания менеджера по управлению продуктом(сервером и клиентами нижнего уровня). К добавок к этому использовали структуру из фреймсетов и фреймов для реализации web морды.

 

Об автоматизации тестирования на момент создания сиего чуда природы некто не задумывался, поэтому написали не очень удобное приложение с точки зрения написания UI тестов.

 

Следовательно прибавив к этому IIS  Microsoft и самописный сервер( на WCF) для обработки запросов(не прошедший оптимизацию скорости работы и траты ресурсов) наша компания получила довольно  таки громоздкую, прожорливую систему. 

Я думаю многие опытные тестеры догадаются о подводных камнях, которые мешают написанию UI тестов. А именно это скорость работы, то есть ожидания(Wait) и все что с ними связано.

Я столкнулся с проблемой того что время транзакций по времени между IIS и самописным сервером(даже при выполнение тестов в UnitHTML) не являются постоянными и выполняются с очень большим разбросом времени( от 5 до 180 сек).
Это ужасно, так как перед запуском тестов я использую xml файл для конфигурирования браузера(в том числе и UnitHTML). В этом файле указываются все необходимые настройки плюс Wait-ы.

Тест зачастую валились из за истечения времени. Я долго боролся с этой проблемой пытаясь ее решить изящным способом. В результате опустился до рекурсии

 

  public IList<IWebElement> FindToSetSystemParametersForSearch()
        {
            try
            {
                new WebDriverWait(driver, TimeSpan.FromSeconds(60)).Until(ExpectedConditions.ElementIsVisible(By.XPath("XPath")));
                return this.driver.FindElements(By.XPath("XPath"));
            }
            catch (WebDriverTimeoutException e)
            {
                return FindToSetSystemParametersForSearch();
            }
           
        }

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

Настала пора еще одного такого вопроса:

Кто то может что то подсказать по решению этой проблемы?


  • 0

#2 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 12 февраля 2017 - 08:48

Расскажите, как пользователи работают с системой где отклик 5-180 секунд? И кто эти пользователи (люди или программы)
  • 0

#3 Dmitriy_BOL

Dmitriy_BOL

    Новый участник

  • Members
  • Pip
  • 29 сообщений


Отправлено 12 февраля 2017 - 10:32

Расскажите, как пользователи работают с системой где отклик 5-180 секунд? И кто эти пользователи (люди или программы)

пользователи, 180 это пороговое(максимальное) значение.


  • 0

#4 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 12 февраля 2017 - 10:42

Ну и как эти пользователи терпят эти 180 секунд? Кофе себе делают или ещё что?

Может чинить надо не тесты а систему?
  • 0

#5 Dmitriy_BOL

Dmitriy_BOL

    Новый участник

  • Members
  • Pip
  • 29 сообщений


Отправлено 12 февраля 2017 - 10:50

Ну и как эти пользователи терпят эти 180 секунд? Кофе себе делают или ещё что?

Может чинить надо не тесты а систему?

Если бы кто то за это взялся... у нас в компании изначально разрабов возвели в этакие боги всего и вся, вобщем в любом случае надо мне подправить решение которое я  продемонстрировал, как это сделать я не совсем понимаю в силу своей  неопытности. Есть какие то предложения или советы?


  • 0

#6 Alex

Alex

    Постоянный участник

  • Members
  • PipPipPip
  • 237 сообщений
  • ФИО:Алексей

Отправлено 13 февраля 2017 - 08:28

 

Ну и как эти пользователи терпят эти 180 секунд? Кофе себе делают или ещё что?

Может чинить надо не тесты а систему?

Если бы кто то за это взялся... у нас в компании изначально разрабов возвели в этакие боги всего и вся, вобщем в любом случае надо мне подправить решение которое я  продемонстрировал, как это сделать я не совсем понимаю в силу своей  неопытности. Есть какие то предложения или советы?

 

А что конкретно мешает сделать TimeSpan.FromSeconds(60) конфигурируемым? То, что время отклика разное в разных окружениях - не новость. Потому, собственно, таймауты  и выносятся в набор настроек теста


  • 1

#7 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 13 февраля 2017 - 14:08

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

Если элемент так и не появится, мы дождемся StackOverflowException, вот только с интервалом вызовов в минуту ждать его будем ооочень долго.


  • 1

#8 Dmitriy_BOL

Dmitriy_BOL

    Новый участник

  • Members
  • Pip
  • 29 сообщений


Отправлено 14 февраля 2017 - 06:27

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

Если элемент так и не появится, мы дождемся StackOverflowException, вот только с интервалом вызовов в минуту ждать его будем ооочень долго.

то есть, интервал можно уменьшить, в теле метода дописать обработку StackOverflowException пробросив исключение в тест, а в тесте сделать обработку на исключение для корректного завершения теста и закрытия браузера? Правильно мыслю?


  • 0

#9 Dmitriy_BOL

Dmitriy_BOL

    Новый участник

  • Members
  • Pip
  • 29 сообщений


Отправлено 14 февраля 2017 - 11:16

 

 

Ну и как эти пользователи терпят эти 180 секунд? Кофе себе делают или ещё что?

Может чинить надо не тесты а систему?

Если бы кто то за это взялся... у нас в компании изначально разрабов возвели в этакие боги всего и вся, вобщем в любом случае надо мне подправить решение которое я  продемонстрировал, как это сделать я не совсем понимаю в силу своей  неопытности. Есть какие то предложения или советы?

 

А что конкретно мешает сделать TimeSpan.FromSeconds(60) конфигурируемым? То, что время отклика разное в разных окружениях - не новость. Потому, собственно, таймауты  и выносятся в набор настроек теста

 

Ты прав. Но у меня проблема именно с организацией обработки ожидания, а не конфигурированния тестов. Конфигурирование тестов это отдельная тема.


  • 0

#10 checo

checo

    Опытный участник

  • Members
  • PipPipPipPip
  • 400 сообщений
  • Город:Н.Новгород

Отправлено 14 февраля 2017 - 15:36

то есть, интервал можно уменьшить, в теле метода дописать обработку StackOverflowException пробросив исключение в тест, а в тесте сделать обработку на исключение для корректного завершения теста и закрытия браузера? Правильно мыслю?

Ну если честно, это вообще за пределами моего понимания - создавать ошибки, чтобы потом их ловить через неопределенно долгое время.

Что мешает просто поставить Wait нужной длины и просто обрабатывать ошибку, если элемента нет? Зачем ловить ошибки, которые как раз ловить не нужно?

Просто сделайте для начала поиск по этому форуму по словам "page object". Посмотрите, как другие это пишут.


  • 0



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных