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

Фотография

Webdriver и TeamCity


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

#1 IvanychAg

IvanychAg

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

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


Отправлено 28 августа 2013 - 14:52

Всем привет!

Имеет место быть следующая проблема.

Есть тесты, написанные на C# для Selenium Webdriver (соответственно, C#-версия драйвера) для некого веб-сайта (ASP + C#).
Под Firefox.
Версия Selenium - 2.35.0.

Тесты запускаются из Visual Studio 2012 (MSTest).
Они отлично проходятся локально в браузере (Firefox последних версий, прямо сейчас стоит 23.0.1).
На разных компьютерах, с разными версиями Windows (Seven, 2008 Server).
Все довольно стабильно, используются всяческие implicit и explicit wait'ы (на сайте много аякса), вылетает что-либо довольно редко.

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

На сборочном сервере тоже стоит последняя версия Firefox. И при запуске в браузере (из Visual Studio) все проходится на ура.

Падают тесты стабильно в одних и тех же местах.
Как пример:

_driver.FindElement(By.XPath("//a[contains(text(),'Contracts')]")).Click();
new SelectElement(_driver.FindElement(By.Id("Contracts_Create"))).SelectByText(Data.Add.ContractsCreate);
new SelectElement(_driver.FindElement(By.Id("Contracts_Delete"))).SelectByText(Data.Add.ContractsDelete);
_driver.FindElement(By.XPath("//a[contains(text(),'Declarations')]")).Click();
new SelectElement(_driver.FindElement(By.Id("Declarations_Menu_Tab"))).SelectByText(Data.Add.DeclarationsMenuTab);
_driver.FindElement(By.XPath("//a[contains(text(),'Documents')]")).Click();
new SelectElement(_driver.FindElement(By.Id("Documents_Access_Control_List"))).SelectByText(Data.Add.DocumentsAccessControlList);
_driver.FindElement(By.LinkText("Set Types")).Click();

Т.е. кликнули на кнопке (точнее, ссылке) Contracts. Выбрали значения в дропдаунах. Кликнули на ссылку Declarations, выбрали там значение в дропдауне (при этом страница не перезагружалась, исчезли дропдауны для Contracts, появился для Decarations). Затем кликнули на ссылку Documents. Там опять появились новые дропдауны, а еще и кнопка ("Set Types"), которой не было ранее. И на строке

new SelectElement(_driver.FindElement(By.Id("Documents_Access_Control_List"))).SelectByText(Data.Add.DocumentsAccessControlList);
т.е. на выборе значения дродауна для Documents - оно стабильно падает. Всегда. С ошибкой "Element is not currently visible and so may not be interacted with". И не доходит дело до клика по SetTypes и действия после. Но тест проходится в браузере. Тоже всегда.

Не помогли explicit wait'ы чуть ли не для каждого элемента (ждет указанное количеств времени и не находит), не помогли адские Thread.Sleep'ы, обращения по другим селекторам и т.д.

Есть еще пара аналогичных мест (в одном появляется text edit после клика на чекбокс - и драйвер не находит это поле ввода, в другом тоже не находит какой-то появляющийся по ходу дела элемент). Тоже стабильно падает в TeamCity и проходится в браузере.

Буду очень рад помощи и мнения.
1. Почему такое происходит?
2. Почему происходит именно в TeamCity, а в бразуере всё OK?
3. Можно ли это как-нибудь вылечить?

Заранее огромное спасибо. Уже кучу времени потерял в попытках наладить и активном гуглении.
  • 0

#2 Vitalik_V

Vitalik_V

    Активный участник

  • Members
  • PipPip
  • 149 сообщений
  • ФИО:Виталий
  • Город:Харьков

Отправлено 28 августа 2013 - 15:09

Как я понимаю, ваши тесты запускаются в HTMLUnitDriver, а не в FireFoxDriver. По опыту могу сказать, что поведение в нем и в реальном браузере отличается. Если тимсити стоит на виндовом сервере, то можете изменить тип драйвера, думаю должно помочь. Но это сразу увеличит время прохождения тестов и нагрузку на сервер. Или можете попытаться отладить тесты используя HTMLUnitDriver при запуске в VS
  • 0

#3 freimensch

freimensch

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

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


Отправлено 28 августа 2013 - 18:15

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

Была похожая проблема, когда тесты выполнялись в сессии CI сервера, и размер экрана был какой-то совсем небольшой.
Решили проблему путем выставления большего разрешения сессии (либо через rdp, либо подключением монитора)
  • 0

#4 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 29 августа 2013 - 07:15

Пока проблема не решится, у нас примерно такая же проблема, запускайте тесты в FF.
Ну,может, придётся чуток подправить их, ну хоть большого простоя не будет.
  • 0

#5 IvanychAg

IvanychAg

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

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


Отправлено 29 августа 2013 - 11:58

Как я понимаю, ваши тесты запускаются в HTMLUnitDriver, а не в FireFoxDriver.

Нет, они запускаются именно с использованием драйвера Firefox. TeamCity запускает тесты (вызывая mstest) из уже скомпилированной в процессе сборки билда библиотеки, а в коде тестов указан мозилловский драйвер. При отсутствии на сборочном сервере файрфокса тесты в принципе не запускаются.
  • 0

#6 IvanychAg

IvanychAg

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

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


Отправлено 29 августа 2013 - 12:01

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


В инициализации указано
driver.Manage().Window.Maximize();
Даже если указать конкретные значения, например
driver.Manage().Window.Size = new System.Drawing.Size(1280, 1024);
картина не меняется, увы.
  • 0

#7 Vitalik_V

Vitalik_V

    Активный участник

  • Members
  • PipPip
  • 149 сообщений
  • ФИО:Виталий
  • Город:Харьков

Отправлено 29 августа 2013 - 14:45

Тесты запускаются из Visual Studio 2012 (MSTest).

А вы пробовали их запустить локально, не из VS? И что вы используете для управления тестами? nunit?!
  • 0

#8 freimensch

freimensch

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

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


Отправлено 29 августа 2013 - 17:53

В инициализации указано

driver.Manage().Window.Maximize();
Даже если указать конкретные значения, например
driver.Manage().Window.Size = new System.Drawing.Size(1280, 1024);
картина не меняется, увы.


Не это имел ввиду.

Покажу на примере виртуалки: когда вы ее запускаете, там формируется десктоп с заданным вами разрешением. И как бы вы не увеличили размер браузера (через maximize или size) - видимая часть все равно будет ограничена разрешением десктопа. Именно это разрешение я советовал увеличить
  • 0

#9 IvanychAg

IvanychAg

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

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


Отправлено 29 августа 2013 - 21:25

А, спасибо, понял вас, попробую - отпишусь.
  • 0

#10 IvanychAg

IvanychAg

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

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


Отправлено 30 августа 2013 - 07:13

А вы пробовали их запустить локально, не из VS?


Да, из командной строки.

И что вы используете для управления тестами? nunit?!


MSTest я использую. NUnit использовал давно ранее, решили от него отказаться.
  • 0

#11 IvanychAg

IvanychAg

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

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


Отправлено 30 августа 2013 - 10:20

И как бы вы не увеличили размер браузера (через maximize или size) - видимая часть все равно будет ограничена разрешением десктопа. Именно это разрешение я советовал увеличить


Попробовал получить текущее разрешение из тестов. Да, действительно, оно почти в два раза меньше обычного рабочего.

Только не очень понятно, что теперь делать :) Как сделать так, чтобы это разрешение поменять... как я понимаю, пока тимситиевский билд-агент запускается как сервис, это не сделать. Или нет? Буду благодарен за советы.
  • 0

#12 freimensch

freimensch

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

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


Отправлено 31 августа 2013 - 18:44

Я знаю 2 варианта, оба работают с использованием Remote Desktop:
  • Подключиться к консольной (нулевой) сессии (в которой и живут все сервисы) - mstsc.exe /admin или mstsc.exe /console, работает только до Win2003 включительно
  • Просто подключиться к серверу, запустить в этой сессии билд-агент через командный файл или еще как
А разрешением Remote Desktop можно уже из его настроек управлять. Обычно оно равно текущему клиентскому разрешению.
  • 0

#13 Rara

Rara

    Активный участник

  • Members
  • PipPip
  • 83 сообщений
  • ФИО:Кондрашов Юрий Алексеевич
  • Город:Минск, Беларусь


Отправлено 13 сентября 2013 - 12:02

Это известная проблема. Чтобы её устранить, нужно сделать так, чтобы TeamCity-агент запускался в режиме приложения, а не сервиса (как у вас). При таком запуске ваш билд (тестовый скрипт) сможет иметь доступ к рабочему столу и вы сможете увидеть FireFox, и все действия которые в нём происходят.

Единственные неудобство данного варианта - постоянно залогиненый пользователь на сервере. Придётся использовать RAdmin (рекомендую) или VNC, чтобы подключаться к сессии залогиненого пользователя. Можно использовать и RDP, но тогда придётся постоянно держать открытым окно удалённой сессии, что неудобно.
  • 0
Я бы переписал жизнь, но Бог не дает мне исходники

#14 IvanychAg

IvanychAg

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

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


Отправлено 25 сентября 2013 - 11:42

Это известная проблема. Чтобы её устранить, нужно сделать так, чтобы TeamCity-агент запускался в режиме приложения, а не сервиса (как у вас).


Огромное вам человеческое спасибо!

Да, сделали всё по инструкциям, запустили ТимСити как приложение.
В первый раз получили зелёный билд. Всё работает, всё проходится.

Обидно, конечно, что в режиме сервиса - никак. Но, тем не менее, это уже большой шаг вперед.
  • 0

#15 Rara

Rara

    Активный участник

  • Members
  • PipPip
  • 83 сообщений
  • ФИО:Кондрашов Юрий Алексеевич
  • Город:Минск, Беларусь


Отправлено 25 сентября 2013 - 12:24

Обидно, конечно, что в режиме сервиса - никак.

Если это критично, то можно попробовать и в режиме сервиса. Думаю, что если сервис запустить не от учётной записи System, а от учётной записи залогиненного пользователя, то он сможет иметь доступ к рабочему столу, так же как обычное приложение. Когда-то читал про такой вариант, но сам не проверял, не было необходимости.

P.S. Расскажите про результат, если будете пробовать.
  • 0
Я бы переписал жизнь, но Бог не дает мне исходники


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

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