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

Фотография

Нестабильное прохождение тестов.

Selenium WebDriver C#

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

#1 _amid_

_amid_

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

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

Отправлено 04 апреля 2014 - 12:22

У нас на проекте около 100 написанных тестов, которые запускаются в пяти разных браузерах. Запускаются они все во время ночного билда на TeamCity (OS: Windows Server 2012). Стабильно около 100 тестов валятся, не одни и те же... рандомно можно сказать.

 

Локально у себя на машине из под VisualStudio запускаю по одному - проходят, запускаю все вместе - часть стабильно валятся.

Основная часть ошибок - "Could not find element", "Input string was not in a correct format", "Element does not exist in cache" и небольшая часть загадочных ексепшенов такого плана "Неизвестная ошибка JavaScript-а"(в основном в опере).

 

Задержки все написаны с использованием WebDriverWait.

 

Заметил что при использовании Browser.GoTo драйвер ожидает окончания загрузки страницы а при каких либо нажатиях на кнопки или ссылки - этой задержки нету, и приходится ставить ручные задержки но порой уж очень долгие надо ставить что бы более менее адекватно тест проходил.

 

Попробовал часть тестов переписать с использованием Page-Object паттерна и пробовал использовать TestStack.Seleno библиотеку... и они тоже периодически валятся.

 

Что еще можно попробовать, переделать?!


  • 0

#2 vmaximv

vmaximv

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

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 04 апреля 2014 - 13:16

А что тут можно посоветовать? Делайте нормальное логирование, скрины, пишите видео - и разбирайтесь с каждой проблемой отдельно.
Одного общего ответа вам не найти - т.к. все траблы различного происхождения.
  • 0

#3 _amid_

_amid_

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

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

Отправлено 05 апреля 2014 - 06:09

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


  • 0

#4 elvis

elvis

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

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 05 апреля 2014 - 13:34

http://docs.selenium...er_advanced.jsp


  • 0

#5 appmen

appmen

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

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 07 апреля 2014 - 07:04

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

Element does not exist in cache - эта ошибка может значить, что ДОМ - дерево поменялось и ссылки на элементы уже не действительны, хотя элемент сам есть и всё с ним хорошо


  • 0

#6 fenixx

fenixx

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

  • Members
  • Pip
  • 29 сообщений
  • Город:Москва

Отправлено 09 апреля 2014 - 11:55

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

 

Тут как ожидать элемент лучше:

http://software-test...resent/?p=61704

 

Тут почему Wait класс не стоит использовать для ожидания:

http://software-test...resent/?p=61742

 

Возможно у вас на странице еще и Ajax загружается.
Загрузка страницы не означает окончание работы Ajax.

	int TimeOutLoadAjax = 30000; // 1000 = 1 сек.  
        int stepTime = 200; // Шаг ожидания
	public void WaitForAjax(IWebDriver Driver)// Метод ожидает окончания Ajax запроса на странице
        {
            int i = 0;
            while (TimeOutLoadAjax > (i = i + stepTime))
            {
                var ajaxIsComplete = (bool)(Driver as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0");// Это для ожидания завершения Ajax при использовании библиокеки jQuery
                if (ajaxIsComplete)
                {
                    // Тут логирование в случае окончания всех Ajax запросов на странице
                    break;
                }
                else if (TimeOutLoadAjax <= i)
                {
                    // Тут логирование в случае не удачи по окончанию времени
                }
                Thread.Sleep(stepTime);
            }
        }

  • 0

#7 fenixx

fenixx

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

  • Members
  • Pip
  • 29 сообщений
  • Город:Москва

Отправлено 27 мая 2014 - 06:48

Столкнулся с проблемой в ожидании завершения всех Ajax в FireFoxe вместо при проверке jQuery.active всегда выдает ждал и минуту и больше, подскажите как можно определить что за Ajax отрабатывает?

Визуально все Ajax-ы отработали.

public void WaitForAjax(IWebDriver Driver)// Метод ожидает окончания Ajax запроса на странице
        {
            int i = 0;
            while (TimeOutLoadAjax > (i = i + stepTime))
            {
                var ajaxIsComplete = (bool)(Driver as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0");
                if (ajaxIsComplete)
                {
                    Logs(" Ajax завершился");
                    break;
                }
                else if (TimeOutLoadAjax <= i)
                {
                    WebDriverScreenshot(Driver, DateTime.Now.ToString("\n dd-MMMM-yyyy HH-mm-ss") + "\n Ajax лимит времени (" + TimeOutLoadAjax / 1000 + " сек.) ожидания Ajax закончился");
                    break;
                }
                Thread.Sleep(stepTime);
            }
        }

  • 0

#8 vmaximv

vmaximv

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

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 27 мая 2014 - 07:04

У меня легкий когнитивный диссонанс: jQuery.active==true => ajaxIsComplete - это как?

Url: jquery.com
Browser: FF24.0


>>> jQuery.active
0
>>> jQuery.active==true
false
>>> jQuery.active==0
true
>>> 0==true
false
>>> 1==true
true
>>> 2==true
false

  • 0

#9 fenixx

fenixx

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

  • Members
  • Pip
  • 29 сообщений
  • Город:Москва

Отправлено 27 мая 2014 - 07:12

У меня легкий когнитивный диссонанс: jQuery.active==true => ajaxIsComplete - это как?

Url: jquery.com
Browser: FF24.0



>>> jQuery.active
0
>>> jQuery.active==true
false
>>> jQuery.active==0
true
>>> 0==true
false
>>> 1==true
true
>>> 2==true
false

 

Извините, ошибся, и поэтому выше сообщение исправил.


  • 0

#10 fenixx

fenixx

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

  • Members
  • Pip
  • 29 сообщений
  • Город:Москва

Отправлено 27 мая 2014 - 11:27

Столкнулся с проблемой в ожидании завершения всех Ajax в FireFoxe.

При проверке значения jQuery.active после завершения визуальных Ajax-сов всегда выдает ждал и минуту и больше.

Не могу понять в чем ошибка, то ли в Seleniume то ли в отработке самого Ajax-са. Руками ошибку воспроизвести не могу. 

Подскажите как проверить в чем ошибка?

public void WaitForAjax(IWebDriver Driver)// Метод ожидает окончания Ajax запроса на странице
        {
            int i = 0;
            while (TimeOutLoadAjax > (i = i + stepTime))
            {
                var ajaxIsComplete = (bool)(Driver as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0");
                if (ajaxIsComplete)
                {
                    Logs(" Ajax завершился");
                    break;
                }
                else if (TimeOutLoadAjax <= i)
                {
                    WebDriverScreenshot(Driver, DateTime.Now.ToString("\n dd-MMMM-yyyy HH-mm-ss") + "\n Ajax лимит времени (" + TimeOutLoadAjax / 1000 + " сек.) ожидания Ajax закончился");
                    break;
                }
                Thread.Sleep(stepTime);
            }
        }

  • 0



Темы с аналогичным тегами Selenium, WebDriver, C#

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

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