Я давно искал такой вариант запуска Internet Explorer в Windows, чтобы окно открывалось в скрытом режиме, и не мешало дальнейшей работе на локальной машине, пока там же идут тесты.
Я конечно, пользуюсь PhantomJS для этих задач… но мне нужен Internet Explorer!
В поисках, я дошёл до отчаянья. Даже уже хотел допилить Triflejs для того чтобы он поддерживал протокол Вебдрайвера…
И случайно, нашёл решение запуска окна IE в скрытом режиме. Ну… скорее даже хак
Недавно, я ошибся в параметре PsExec, которую использовал для запуска тестов на виртуалках. Результатом ошибки было то, что тесты для IE были запущены и прошли успешно… но, при этом, окно браузера не открывалось на рабочем столе.
Как оказалось, этот трюк с PsExec отлично работает для локальной машины.
Но, появилась другая проблема в том, что таким образом, я могу запустить локально весь test suite, но не отдельные тесты на выбор.
Первым рабочим решением было запустить selenium-server-standalone в невидимом режиме, и подключатся к нему локально.
Это я делал при помощи следующего bat-файла:
@REM psstart.bat:
@set IE=-Dwebdriver.ie.driver="%cd%\IEDriverServer.exe"
@set CHROME=-Dwebdriver.chrome.driver="%cd%\chromedriver.exe"
@set PHANTOM=-Dphantomjs.binary.path="%cd%\phantomjs.exe"
@set SELENIUM_SERVER_EXE=selenium-server-standalone-2.41.0.jar
psexec.exe \\localhost -u dzhariy -p paSSwww0RD -w "%cd%" java %PHANTOM% %CHROME% %IE% -jar %SELENIUM_SERVER_EXE%
И это решение работало, но я хотел каким-то образом избавить себя от запуска selenium-server-standalone.
Мне нужно было как-то подменить прямой запуск IEDriverServer.exe на свой bat-файл.
И хорошо, что WebDriver это позволяет сделать.
var ieservice = InternetExplorerDriverService.CreateDefaultService(@"D:\projects_current\HeadlessIETest", "headlessie.cmd");
var options = new InternetExplorerOptions();
var wd = new InternetExplorerDriver(ieservice, options);
В этом примере, вместо IEDriverServer.exe, первоначально будет запущен headlessie.cmd.
Ну, а в свою очередь, headlessie.cmd запустит IEDriverServer.exe в скрытом режиме.
@REM headlessie.cmd:
%~dp0psexec.exe \\localhost -u dzhariy -p PassW0rd %~dp0IEDriverServer.exe %*
Пока эксперимент продолжается. Я столкнулся с проблемой снятия скриншотов. В таком режиме, к сожалению, WebDriver возвращает «чёрный квадрат» вместо скриншота страницы. Возможно, в том месте, где он был запущен действительно так темно.
Но, пока что это удалось решить при помощи ещё одного хака:
Html2CanvasWebDriver.cs.
To be continued…