Подключение Selenium для непрерывной интеграции в Windows - PullRequest
1 голос
/ 22 марта 2011

Фон

Я работал над автоматизацией моего комплекта тестов Selenium, который я разработал для Selenium 1.0 (RC), и подключил его к системе непрерывной интеграции ( TeamCity в этом случае) на моей сборочной машине. Я быстро столкнулся с тем фактом, что я мог запустить пакет вручную на компьютере сборки, но это не удалось при запуске TeamCity.

Для полноты, вот как выглядит журнал сервера селена, когда успешно :

18:26:09.025 INFO [12] org.openqa.selenium.server.SeleniumDriverResourceHandler - Command request: getNewBrowserSession[*iexplore, http://dev2mx:8080/, ] on session null
18:26:09.041 INFO [12] org.openqa.selenium.server.BrowserSessionFactory - creating new remote session
18:26:09.072 DEBUG [12] org.openqa.selenium.server.browserlaunchers.BrowserLauncherFactory - Requested browser string '*iexplore' matches *iexplore
18:26:09.072 INFO [12] org.openqa.selenium.server.BrowserSessionFactory - Allocated session 1c8363f1edbc40b9b251e3bf4bd3d74f for http://portaldev2:80/, launching...
18:26:09.103 DEBUG [12] org.openqa.selenium.server.browserlaunchers.ResourceExtractor - Extracting /core to C:\DOCUME~1\devadmin\LOCALS~1\Temp\5\customProfileDir1c8363f1edbc40b9b251e3bf4bd3d74f\core
18:26:09.244 INFO [12] org.openqa.selenium.server.browserlaunchers.HTABrowserLauncher - Launching Embedded Internet Explorer...
18:26:09.260 DEBUG [12] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Discovering Internet Explorer...
18:26:09.260 DEBUG [12] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Checking whether Internet Explorer launcher at :'C:\Program Files\Internet Explorer\iexplore.exe' is valid...
18:26:09.260 DEBUG [12] org.openqa.selenium.browserlaunchers.locators.BrowserLocator - Discovered valid Internet Explorer launcher  : 'C:\Program Files\Internet Explorer\iexplore.exe'
18:26:09.275 INFO [12] org.openqa.selenium.server.browserlaunchers.HTABrowserLauncher - Launching Internet Explorer HTA...
18:26:09.291 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for window 'null' local frame 'null' for 1800 more secs
18:26:09.291 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for condition for 1000 more ms
18:26:10.307 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - got condition? : false
18:26:10.307 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for window 'null' local frame 'null' for 1799 more secs
18:26:10.307 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for condition for 1000 more ms
18:26:10.994 DEBUG [13] org.openqa.jetty.http.HttpConnection - new HttpConnection: Socket[addr=/127.0.0.1,port=3255,localport=4444]
18:26:11.010 DEBUG [13] org.openqa.jetty.http.HttpConnection - REQUEST from SocketListener0@0.0.0.0:4444:

Режим отказа проявляется в журнале, никогда не доходя до последних двух строк. Очередь ожидания чуть выше продолжала ждать, ждать и ждать:

12:19:16.191 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for window 'null' local frame 'null' for 1800 more secs
12:19:16.191 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for condition for 1000 more ms
12:19:17.191 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - got condition? : false
12:19:17.191 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for window 'null' local frame 'null' for 1799 more secs
12:19:17.191 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for condition for 1000 more ms
12:19:18.207 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - got condition? : false
12:19:18.238 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for window 'null' local frame 'null' for 1798 more secs
12:19:18.238 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for condition for 1000 more ms
12:19:19.254 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - got condition? : false
12:19:19.254 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for window 'null' local frame 'null' for 1797 more secs
12:19:19.254 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for condition for 1000 more ms
12:19:20.269 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - got condition? : false

Я думал о разных ракурсах, чтобы изучить проблему, начиная с обновления Selenium RC до Selenium 2.0b2 и просто заменяя jar сервера и ссылки на библиотеки. Тот же результат.

Затем я подумал о дальнейшем переходе на WebDriver и Selenium 2.0, заменив

selenium = new DefaultSelenium("localhost", port, browserType, pageToOpen);

с

selenium = new WebDriverBackedSelenium(driver, pageToOpen);

С чем я сразу столкнулся, так это с тем, что WebDriver более строг в отношении фреймов! Мои тесты не проходили до тех пор, пока я не уточнил более строго, в каком кадре должны были находиться последующие объекты. Эта переделка еще не завершена, поэтому пока нет никаких выводов относительно моей первоначальной проблемы, но я подозреваю, что знаю ответ, потому что ...

Параллельно я начал читать о Selenium и безголовой конфигурации и непрерывной интеграции. Кажется, что сервер непрерывной интеграции должен, по определению, запускать все без головы, но селен нуждается в отображении. Конфликт. (Я не хочу использовать HtmlUnitDriver, потому что я хочу тестировать на реальных браузерах; не говоря уже о том, что HtmlUnitDriver еще не существует для .NET в 2.0b2!) Я прочитал о xvfb в качестве решения для linux, но я работаю на Windows Server 2003. Наиболее вероятным решением, по-видимому, является использование Selenium Grid, который может запускать настоящие браузеры на других машинах. К сожалению, Grid еще не существует для Selenium 2, так что в настоящее время это означает, что нужно придерживаться Selenium RC. Не идеально, но я мог бы жить с этим.

Вопросы

Я еще не смотрел на Grid, так что, вероятно, наивный вопрос: возникнут ли у Grid (работающие без поддержки в TeamCity) проблемы с открытием реальных браузеров на удаленных машинах?

Есть ли способ подключить Selenium 2 (без поддержки Grid) с непрерывной интеграцией?

Ответы [ 2 ]

1 голос
/ 23 июня 2011

Я столкнулся с подобной проблемой в отношении бесконечных сообщений об ошибках, таких как:

12:19:16.191 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for window 'null' local frame 'null' for 1800 more secs
12:19:16.191 DEBUG [12] org.openqa.selenium.server.FrameGroupCommandQueueSet - waiting for condition for 1000 more ms

Как выясняется, запуск агента сборки в качестве службы Windows приведет к тому, что браузер выполнит процессзапустить, но не настоящий браузер, с которым селен может взаимодействовать.Если вы остановите службу, перейдете в каталог bin агента сборки и запустите агент сборки вручную (agent.bat start), вы должны увидеть тесты селена, работающие на выбранном вами браузере при сборке TeamCity.

Надеждаэто помогает!

1 голос
/ 23 марта 2011

наивных ответов:

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

Вы должны быть в состоянии использовать Selenium 2 с поддержкой сетки, он должен быть таким же, как при использовании Selenium 1

n.b. Я должен был просто прочитать «Вопросы» и ответить; -)

...