【发布时间】:2019-09-21 09:22:21
【问题描述】:
使用 SELENIUM 和 ASP.NET 4.5 MVC 的码头工人
我想做什么?
尝试创建一个执行以下操作的 docker 映像。是的,我知道这里还有其他方法可以完成最终游戏,但我对此有一个具体要求。
- 运行 ASP.NET MVC 4.5 Web 应用程序
- 已通过 c# 控制台 exe 测试代码的 selenium 驱动程序
当前状态 - 在常规 Windows 10 或 Windows 2016 中运行测试时,它运行良好。当测试在 Windows docker 容器中运行时,它会出现“session 由于页面崩溃而被删除”。请注意,我专注于 chrome 测试,但我们也使用 FireFox 获得了类似的结果。
我打开了 selenium chrome 的详细调试并捕获了日志文件。我有两个日志文件。 “goodrun_log.txt”来自 Windows 10 成功测试。 “docker_log.txt”是容器内运行失败的日志。
关于第 473 行,我们可以看到 docker run 失败。到目前为止,日志文件与良好运行完全相同。然后轰隆隆。那么我们缺少什么导致 docker 容器在那个时候失败呢?
在https://github.com/SeleniumHQ/selenium/issues/7165 上发布到 Selenium 在https://github.com/Microsoft/aspnet-docker/issues/181 发布到 ASP.NET docker repo
看起来很像
- Docker 问题 (linux) 于 2015 年 8 月 11 日 - /dev/shm 大小调整 - https://github.com/elgalu/docker-selenium/issues/20 by kkochubey1
- Docker 问题 (linux) 2018 年 3 月 - https://github.com/pranavgore09/fabric8-planner/pull/3
- Chrome 驱动程序 - https://github.com/rshf/chromedriver/issues/772
- Chromium 错误 (linux) - https://bugs.chromium.org/p/chromium/issues/detail?id=522853
我尝试过的事情
- chrome 标志(不止于此,但...)
option.AddArgument("--disable-dev-shm-usage"); // https://github.com/elgalu/docker-selenium/issues/20#issuecomment-407101358
- 像这样重试驱动程序https://github.com/electron/electron/issues/9369#issuecomment-312234465
- SHM 模式。命令运行但未解决问题
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
码头工人运行失败
[1556732925.450][DEBUG]:DevTools WebSocket 事件:DOM.documentUpdated 7FCEC12C5F4ADEA352BBA3DF3AF6075D { } [1556732925.450][DEBUG]:DevTools WebSocket 命令:DOM.getDocument (id=15) 7FCEC12C5F4ADEA352BBA3DF3AF6075D { } [1556732925.451][DEBUG]:DevTools WebSocket 响应:Runtime.evaluate (id=14) 7FCEC12C5F4ADEA352BBA3DF3AF6075D { “结果”: { “类型”:“字符串”, “价值”:“http://localhost/” } } [1556732925.531][DEBUG]:DevTools WebSocket 事件:Inspector.targetCrashed 7FCEC12C5F4ADEA352BBA3DF3AF6075D { } [1556732925.532][INFO]:等待挂起的导航... [1556732925.532][DEBUG]:DevTools WebSocket 命令:Runtime.evaluate (id=16) 7FCEC12C5F4ADEA352BBA3DF3AF6075D { “表达式”:“1” } [1556732925.532][INFO]:等待未决导航完成。状态:未知错误:无法确定加载状态 从标签崩溃 [1556732925.552][INFO]:[464b2b630c39434969f9b90e11b7aa37] 响应导航错误未知错误:由于页面崩溃而删除会话 来自未知错误:无法确定加载状态 从标签崩溃 (会话信息:无头 chrome=74.0.3729.108) [1556732925.552][DEBUG]:日志类型“驱动程序”在销毁时丢失 0 个条目 [1556732925.552][DEBUG]:日志类型“浏览器”在销毁时丢失 0 个条目WIN10 运行良好
[1556733552.098][DEBUG]:DevTools WebSocket 事件:DOM.documentUpdated 193B5CE9ACD5F7CE56919120C68276A7 { } [1556733552.098][DEBUG]:DevTools WebSocket 命令:DOM.getDocument (id=15) 193B5CE9ACD5F7CE56919120C68276A7 { } [1556733552.104][DEBUG]:DevTools WebSocket 响应:Runtime.evaluate (id=14) 193B5CE9ACD5F7CE56919120C68276A7 { “结果”: { “类型”:“字符串”, “价值”:“http://localhost:29657/” } } [1556733552.104][DEBUG]:DevTools WebSocket 响应:DOM.getDocument (id=15) 193B5CE9ACD5F7CE56919120C68276A7 { “根”: { “后端节点ID”:6, "baseURL": "http://localhost:29657/", “childNodeCount”:1, “孩子们”: [ { “属性”: [ ], “后端节点ID”:7, “childNodeCount”:2, ...更多...由于页面崩溃而删除会话
PS C:\seleniumtests> .\SeleniumDockerTest.exe http://localhost [chrome 选项:] =[--headless --no-sandbox --disable-gpu] 在端口 49160 上启动 ChromeDriver 74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}) 只允许本地连接。 请保护 ChromeDriver 和相关测试框架使用的端口,防止恶意代码访问。 [0501/120039.381:ERROR:network_change_notifier_win.cc(156)] WSALookupServiceBegin 失败:0 [0501/120039.428:ERROR:audio_device_listener_win.cc(46)] RegisterEndpointNotificationCallback 失败:80070424 DevTools 监听 ws://127.0.0.1:49163/devtools/browser/f33a8cd9-6411-46f5-a9ab-d69901cd53c1 [0501/120039.772:ERROR:network_change_notifier_win.cc(156)] WSALookupServiceBegin 失败:0 [捕获异常] =[OpenQA.Selenium.WebDriverException:未知错误:会话因页面崩溃而被删除 来自未知错误:无法确定加载状态 从标签崩溃 (会话信息:无头 chrome=74.0.3729.108) (驱动程序信息:chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Windows NT 10.0.17763 x86_64) 在 OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(响应错误响应) 在 OpenQA.Selenium.Remote.RemoteWebDriver.Execute(字符串 driverCommandToExecute,Dictionary`2 参数) 在 OpenQA.Selenium.Remote.RemoteWebDriver.set_Url(字符串值) 在 OpenQA.Selenium.Remote.RemoteNavigator.GoToUrl(字符串 url) 在 C:\dev\docker-selenium-aspnet45.git\SeleniumDockerTest\Program.cs:line 60 中的 SeleniumDockerTest.Program.DoChromeTests()亲自尝试
在https://cloud.docker.com/repository/docker/jhealy62/devfish 有一个带有 Windows、IIS、Chrome、FF 和一些测试的 docker 映像。
将它拉下 repo 并提供它
- docker pull jhealy62/devfish
- docker run -d --name aspnettest -p 5000:80 jhealy62/devfish
Powershell 进入容器
- docker exec -it aspnettest powershell
在 docker 容器内,查看 web 服务器正在工作
- 卷曲http://localhost -UseBasicParsing
查看 seleniumtest 失败:
- 光盘\
- cd \seleniumtests
- .\SeleniumDockerTests.exe http://localhost
跟我一起哭吧!
接下来的步骤
- 已发布问题 - Aspnet docker github - https://github.com/Microsoft/aspnet-docker/issues/181
页面超时问题发生了什么?
WebDriver 超时错误已解决 - 发生在 docker 容器内的 FireFox 或 Chrome 测试中。 FIX(需要以下两项):
- 将 websocket 安装到 docker 容器中。摘自 dockerfile:
RUN powershell -Command Add-WindowsFeature Web-WebSockets
- 将一组非常有趣的选项传递给 chromedriver。
option.AddArguments( "--headless","--disable-gpu", "--no-sandbox" );
【问题讨论】:
-
this 对您有帮助吗?
-
我之前一直在使用htem。没有这些选项,headless 甚至不会触发。我今天会把它推到铬上。感谢您的对话。
-
发布到 chromedriver - 于 0506/19 提交到 chromedriver - github.com/rshf/chromedriver/issues/825
-
有这方面的消息吗?我也面临这个问题...
-
你为什么不尝试使用“selenium/standalone-chrome”图像,然后从当前容器连接到这个容器?
标签: docker selenium-webdriver selenium-chromedriver docker-for-windows