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" );