Селен внутри окна докера Windows завершается неудачно с помощью ff / chrome "сеанс удален из-за сбоя страницы" - PullRequest
14 голосов
/ 02 мая 2019

DOCKER С СЕЛЕНОМ И ASP.NET 4.5 MVC

Что я пытаюсь сделать?

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

  • Запускает веб-приложение ASP.NET MVC 4.5
  • ИмеетДрайвер селена через консоль ac # exe, тестирующий код

Текущее состояние - когда тест выполняется в обычной Windows 10 или Windows 2016, он работает нормально.Когда тест запускается в Docker-контейнере Windows, он дует с « сеанс удален из-за сбоя страницы ».Обратите внимание, что я сосредоточен на тестах Chrome, но мы получаем аналогичные результаты и с помощью FireFox.

Я включил подробную отладку для селена Chrome и перехватил лог-файлы.У меня есть два файла журнала."goodrun_log.txt" из успешного теста Windows 10.«docker_log.txt» - это журнал неудачного запуска внутри контейнера.

В строке 473 мы видим сбой запуска докера.До этого момента файл журнала был точно таким же, как и при хорошем запуске.Тогда бум.Так чего же нам не хватает, что приводит к сбою контейнера Docker в этот момент?

Размещено в Selenium в https://github.com/SeleniumHQ/selenium/issues/7165 Размещено в репозитории Docker ASP.NET в https://github.com/Microsoft/aspnet-docker/issues/181

ВИДИТСЯ ПОХОЖИЕ НА

ВЕЩИ, КОТОРЫЕ Я ПОПРОБОВАЛ

  • chrome flags (намного больше, чем это, но ...)
option.AddArgument("--disable-dev-shm-usage"); // https://github.com/elgalu/docker-selenium/issues/20#issuecomment-407101358
docker run -d --name aspnet48testsrun --shm-size="1g" -p 5000:80 aspnet48testsd
  • память
docker run -d --name aspnet48testsrun -m inf --memory-swap inf -p 5000:80 aspnet48tests
docker run -d --name aspnet48testsrun -m 2g -p 5000:80 aspnet48tests

DOCKER RUN FAIL

[1556732925.450][DEBUG]: DevTools WebSocket Event: DOM.documentUpdated 7FCEC12C5F4ADEA352BBA3DF3AF6075D {

}
[1556732925.450][DEBUG]: DevTools WebSocket Command: DOM.getDocument (id=15) 7FCEC12C5F4ADEA352BBA3DF3AF6075D {

}
[1556732925.451][DEBUG]: DevTools WebSocket Response: Runtime.evaluate (id=14) 7FCEC12C5F4ADEA352BBA3DF3AF6075D {
   "result": {
      "type": "string",
      "value": "http://localhost/"
   }
}
[1556732925.531][DEBUG]: DevTools WebSocket Event: Inspector.targetCrashed 7FCEC12C5F4ADEA352BBA3DF3AF6075D {

}
[1556732925.532][INFO]: Waiting for pending navigations...
[1556732925.532][DEBUG]: DevTools WebSocket Command: Runtime.evaluate (id=16) 7FCEC12C5F4ADEA352BBA3DF3AF6075D {
   "expression": "1"
}
[1556732925.532][INFO]: Done waiting for pending navigations. Status: unknown error: cannot determine loading status
from tab crashed
[1556732925.552][INFO]: [464b2b630c39434969f9b90e11b7aa37] RESPONSE Navigate ERROR unknown error: session deleted because of page crash
from unknown error: cannot determine loading status
from tab crashed
  (Session info: headless chrome=74.0.3729.108)
[1556732925.552][DEBUG]: Log type 'driver' lost 0 entries on destruction
[1556732925.552][DEBUG]: Log type 'browser' lost 0 entries on destruction

WIN10 RUN GOOD

[1556733552.098][DEBUG]: DevTools WebSocket Event: DOM.documentUpdated 193B5CE9ACD5F7CE56919120C68276A7 {

}
[1556733552.098][DEBUG]: DevTools WebSocket Command: DOM.getDocument (id=15) 193B5CE9ACD5F7CE56919120C68276A7 {

}
[1556733552.104][DEBUG]: DevTools WebSocket Response: Runtime.evaluate (id=14) 193B5CE9ACD5F7CE56919120C68276A7 {
   "result": {
      "type": "string",
      "value": "http://localhost:29657/"
   }
}
[1556733552.104][DEBUG]: DevTools WebSocket Response: DOM.getDocument (id=15) 193B5CE9ACD5F7CE56919120C68276A7 {
   "root": {
      "backendNodeId": 6,
      "baseURL": "http://localhost:29657/",
      "childNodeCount": 1,
      "children": [ {
         "attributes": [  ],
         "backendNodeId": 7,
         "childNodeCount": 2,
... lots more ...

УДАЛЕНИЕ СЕССИИ ИЗ-ЗА СБОРА СТРАНИЦЫ

PS C:\seleniumtests> .\SeleniumDockerTest.exe http://localhost
[chrome options:] =[--headless --no-sandbox --disable-gpu]
Starting ChromeDriver 74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}) on port 49160
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
[0501/120039.381:ERROR:network_change_notifier_win.cc(156)] WSALookupServiceBegin failed with: 0
[0501/120039.428:ERROR:audio_device_listener_win.cc(46)] RegisterEndpointNotificationCallback failed: 80070424

DevTools listening on ws://127.0.0.1:49163/devtools/browser/f33a8cd9-6411-46f5-a9ab-d69901cd53c1
[0501/120039.772:ERROR:network_change_notifier_win.cc(156)] WSALookupServiceBegin failed with: 0
[exception caught] =[OpenQA.Selenium.WebDriverException: unknown error: session deleted because of page crash
from unknown error: cannot determine loading status
from tab crashed
  (Session info: headless chrome=74.0.3729.108)
  (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Windows NT 10.0.17763 x86_64)
   at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebDriver.set_Url(String value)
   at OpenQA.Selenium.Remote.RemoteNavigator.GoToUrl(String url)
   at SeleniumDockerTest.Program.DoChromeTests() in C:\dev\docker-selenium-aspnet45.git\SeleniumDockerTest\Program.cs:line 60]

ПОПРОБУЙТЕ СЕБЯ

Существует образ докера с Windows, IIS, Chrome, FF и некоторыми тестами наhttps://cloud.docker.com/repository/docker/jhealy62/devfish.

Снять репозиторий и подготовить его

  • docker pull jhealy62 / devfish
  • docker run -d --name aspnettest -p 5000: 80 jhealy62 / devfish

Powershell в контейнер

  • docker exec -it aspnettest powershell

Внутри док-контейнера см.веб-сервер работает

См. ошибку seleniumtest:

Плачь со мной!

СЛЕДУЮЩИЕ ШАГИ

ЧТО ПРОИЗОШЛО С ПРОБЛЕМОЙ ВРЕМЕНИ НА СТРАНИЦЕ?

Устранена ошибка тайм-аута WebDriver.ИСПРАВЛЕНИЕ (требуется оба пункта ниже):

  • Установите веб-сокеты в док-контейнер.Выдержка из файла dockerfile:
RUN powershell -Command Add-WindowsFeature Web-WebSockets
  • Передайте очень интересный набор параметров для хроматографа.
option.AddArguments( "--headless","--disable-gpu", "--no-sandbox" );
...