Protractor/Selenium running in WMWare Failed: unknown error: session deleted because of page crash
Protractor/Selenium running in WMWare Failed: unknown error: session deleted because of page crash
我们的量角器测试最近因错误而停止工作,我无法在我的开发中重现 machine/env,但似乎经常出现在 运行 中的 Jenkins 构建/测试机器上VMWare (ESxI) 环境。
出现的错误是这样的:
18:05:17 [18:05:09] I/launcher - Running 1 instances of WebDriver
18:05:17 [18:05:09] I/hosted - Using the selenium server at http://localhost:4444/wd/hub
18:05:17 Started
18:05:17
18:05:17 JASMINE STARTING:
18:05:17
18:05:17
18:05:17 » Main App Test
18:05:17 [31mF[0m ✗ App Module Test (1 s)
18:05:17 - Failed: unknown error: session deleted because of page crash
18:05:17 from unknown error: cannot determine loading status
18:05:17 from tab crashed
18:05:17 (Session info: content shell=)
18:05:17 (Driver info: chromedriver=2.28.455520 (cc17746adff54984afff480136733114c6b3704b),platform=Windows NT 6.3.9600 x86_64) (WARNING: The server did not provide any stacktrace information)
18:05:17 Command duration or timeout: 266 milliseconds
18:05:17 Build info: version: '3.3.1', revision: '5234b32', time: '2017-03-10 09:04:52 -0800'
18:05:17 System info: host: 'xxxxxxxxxxxxxxx', ip: '99.99.99.99', os.name: 'Windows Server 2012 R2', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_121'
18:05:17 Driver info: org.openqa.selenium.chrome.ChromeDriver
18:05:17 Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.28.455520 (cc17746adff54984afff480136733114c6b3704b), userDataDir=C:\Users\RABUIL~1\AppData\Local\Temp\scoped_dir6264_14292}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=, platform=WIN8_1, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=}]
18:05:17 Session ID: 8ba3690dfc0ab400933236ae8eefd5ee
我搜索了论坛并发现了其他几个与此错误相关的问题发生在 docker 和 tmux 配置上。这些决议的实质是可以调整环境以允许 Chrome 驱动程序访问一些额外的资源,以便它能够完成其工作。例如:
http://borkweb.com/story/chromedriver-doesnt-run-in-tmux
Selenium: unknown error: session deleted because of page crash
Is there any workaround for "session deleted because of page crash" Chrome error on Travis CI?
https://github.com/angular/protractor/issues/731
(不胜枚举)..
令人沮丧的是,这是一个已经运行了数周的测试集,现在却崩溃了。它从不 在非 VMWare 环境中失败。试图拼凑任何可能有用的线索。有没有人认为 Chrome 驱动程序 运行ning 在 Windows WMWare 环境中的问题类似于在 tmux 和 docker 情况下看到的问题?
我在这里的其他帖子(也没有解决方案)上看到一些暗示这可能存在:
https://sqa.stackexchange.com/questions/22707/selenium-chromedriver-in-virtual-machine
正如我所说,我已经搜索了 Whosebug 和其他论坛,但几乎没有找到明确的方向。
这是我们第一次尝试找到解决此问题的方法,它避免了问题,但在原始上下文中似乎并不是崩溃本身的解决方案。首先,简要介绍一下背景。我们的量角器项目的 package.json 包括以下内容:
"scripts": {
"preinstall": "npm install -g protractor",
"postinstall": "webdriver-manager update",
"pretest": "start \"SeleniumServer\" webdriver-manager start",
"test": "TIMEOUT /T 10 && protractor \"protractor.conf.js\"",
"posttest": "TIMEOUT /T 10 && webdriver-manager shutdown"
},
(我们在 Windows 上 运行,因此这些确切的 package.json
脚本可能与您的 OS 略有不同)。
在构建过程中完成 npm test
后,我们将 运行 npm install -g protractor
结束端到端测试及其在构建机器上的占用空间。我们采用这种方法的原因是构建机器(这个量角器项目 运行ning 在其中)将保持量角器干净,因为我们不希望它影响环境。
我们采用的解决方法是现在将量角器永久地完全安装在机器上,并确保在构建过程中不包含它的 install/uninstall。我们 package.json
脚本部分的相关部分现在看起来像这样。
"scripts": {
"pretest": "start \"SeleniumServer\" webdriver-manager start",
"test": "TIMEOUT /T 10 && protractor \"protractor.conf.js\"",
"posttest": "TIMEOUT /T 10 && webdriver-manager shutdown"
},
其次,我们添加了(如您所见)超时以等待 selenium 服务器完全启动、测试完全完成然后 selenium 服务器完全关闭。命令的 pretest/test/posttest 同步的挂钩生命周期中给出的等待不考虑 windows 实际上 运行s,所以我们不得不使用 start
命令来启动单独的 window 和我们自己的原生 TIMEOUT
调用。
我们最终发现,似乎 VM Ware 在构建过程机器上不可预测地限制了资源,您只需将任务组件化到隔离任何可能挂起或减慢量角器速度的额外东西的程度在 运行ning 时进行测试。
出于某种原因,在 运行 测试之前安装量角器似乎总是让它们定期失败的好方法 。我们消除了这种风险,事后看来这是有道理的,但最初这样做是为了防止它用测试包弄脏构建机器。
希望有道理并能帮助到别人。
最后,前面的答案仅在允许您的测试机器保持安装 protractor
和 selenium
软件的某些情况下才有用。此外,page crash
错误似乎仍然偶尔会在机器上的资源或速度缓慢似乎妨碍构建和测试操作的情况下发生。请记住,我们采用的方法是我们的目标是让整个过程(构建、打包、单元测试和端到端测试)全部在夜间构建过程中完成。在对机器和量角器进行大量调整之后,我们决定 return 的优先事项是在每次构建后完全清理构建机器(包括删除端到端使用的工具 tests/protractor).
那么,这是问题的第二种解决方案,如果您的目标与我们的目标相同,可能会证明它更好(上面的解决方案 1 可能对其他人来说更好)。
- 第 1 步:配置量角器以使用配置文件中的
directConnect
选项。
- 第 2 步:将量角器作为软件包的一部分在本地安装。
- 第 3 步:将网络驱动程序更新为安装的 post 步。
- 第 4 步:从您的本地项目
node_modules
执行量角器,而不是从全局安装。
要完成第 1 步,您的 protractor.conf.js
应该启用 direcConnect
选项,如:
exports.config = {
directConnect: true,
...
...
...
要完成步骤 2-4,您的 package.json
文件应该有一个包含这两行的 scripts
部分(除了您在脚本中需要的任何其他内容):
"scripts": {
"postinstall": "TIMEOUT /T 10 && node ./node_modules/protractor/bin/webdriver-manager update",
"test": "TIMEOUT /T 10 && node ./node_modules/protractor/bin/protractor \"protractor.conf.js\""
},
package.json
文件的 devDependencies
部分应在本地安装量角器,如:
"devDependencies": {
...
...
"protractor": "5.1.1",
...
...
}
进行这些更改后,我们不再遇到与原始 "page crash" 错误有关的任何问题。
我们的量角器测试最近因错误而停止工作,我无法在我的开发中重现 machine/env,但似乎经常出现在 运行 中的 Jenkins 构建/测试机器上VMWare (ESxI) 环境。
出现的错误是这样的:
18:05:17 [18:05:09] I/launcher - Running 1 instances of WebDriver
18:05:17 [18:05:09] I/hosted - Using the selenium server at http://localhost:4444/wd/hub
18:05:17 Started
18:05:17
18:05:17 JASMINE STARTING:
18:05:17
18:05:17
18:05:17 » Main App Test
18:05:17 [31mF[0m ✗ App Module Test (1 s)
18:05:17 - Failed: unknown error: session deleted because of page crash
18:05:17 from unknown error: cannot determine loading status
18:05:17 from tab crashed
18:05:17 (Session info: content shell=)
18:05:17 (Driver info: chromedriver=2.28.455520 (cc17746adff54984afff480136733114c6b3704b),platform=Windows NT 6.3.9600 x86_64) (WARNING: The server did not provide any stacktrace information)
18:05:17 Command duration or timeout: 266 milliseconds
18:05:17 Build info: version: '3.3.1', revision: '5234b32', time: '2017-03-10 09:04:52 -0800'
18:05:17 System info: host: 'xxxxxxxxxxxxxxx', ip: '99.99.99.99', os.name: 'Windows Server 2012 R2', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_121'
18:05:17 Driver info: org.openqa.selenium.chrome.ChromeDriver
18:05:17 Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.28.455520 (cc17746adff54984afff480136733114c6b3704b), userDataDir=C:\Users\RABUIL~1\AppData\Local\Temp\scoped_dir6264_14292}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=, platform=WIN8_1, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=}]
18:05:17 Session ID: 8ba3690dfc0ab400933236ae8eefd5ee
我搜索了论坛并发现了其他几个与此错误相关的问题发生在 docker 和 tmux 配置上。这些决议的实质是可以调整环境以允许 Chrome 驱动程序访问一些额外的资源,以便它能够完成其工作。例如:
http://borkweb.com/story/chromedriver-doesnt-run-in-tmux
Selenium: unknown error: session deleted because of page crash
Is there any workaround for "session deleted because of page crash" Chrome error on Travis CI?
https://github.com/angular/protractor/issues/731
(不胜枚举)..
令人沮丧的是,这是一个已经运行了数周的测试集,现在却崩溃了。它从不 在非 VMWare 环境中失败。试图拼凑任何可能有用的线索。有没有人认为 Chrome 驱动程序 运行ning 在 Windows WMWare 环境中的问题类似于在 tmux 和 docker 情况下看到的问题?
我在这里的其他帖子(也没有解决方案)上看到一些暗示这可能存在:
https://sqa.stackexchange.com/questions/22707/selenium-chromedriver-in-virtual-machine
正如我所说,我已经搜索了 Whosebug 和其他论坛,但几乎没有找到明确的方向。
这是我们第一次尝试找到解决此问题的方法,它避免了问题,但在原始上下文中似乎并不是崩溃本身的解决方案。首先,简要介绍一下背景。我们的量角器项目的 package.json 包括以下内容:
"scripts": {
"preinstall": "npm install -g protractor",
"postinstall": "webdriver-manager update",
"pretest": "start \"SeleniumServer\" webdriver-manager start",
"test": "TIMEOUT /T 10 && protractor \"protractor.conf.js\"",
"posttest": "TIMEOUT /T 10 && webdriver-manager shutdown"
},
(我们在 Windows 上 运行,因此这些确切的 package.json
脚本可能与您的 OS 略有不同)。
在构建过程中完成 npm test
后,我们将 运行 npm install -g protractor
结束端到端测试及其在构建机器上的占用空间。我们采用这种方法的原因是构建机器(这个量角器项目 运行ning 在其中)将保持量角器干净,因为我们不希望它影响环境。
我们采用的解决方法是现在将量角器永久地完全安装在机器上,并确保在构建过程中不包含它的 install/uninstall。我们 package.json
脚本部分的相关部分现在看起来像这样。
"scripts": {
"pretest": "start \"SeleniumServer\" webdriver-manager start",
"test": "TIMEOUT /T 10 && protractor \"protractor.conf.js\"",
"posttest": "TIMEOUT /T 10 && webdriver-manager shutdown"
},
其次,我们添加了(如您所见)超时以等待 selenium 服务器完全启动、测试完全完成然后 selenium 服务器完全关闭。命令的 pretest/test/posttest 同步的挂钩生命周期中给出的等待不考虑 windows 实际上 运行s,所以我们不得不使用 start
命令来启动单独的 window 和我们自己的原生 TIMEOUT
调用。
我们最终发现,似乎 VM Ware 在构建过程机器上不可预测地限制了资源,您只需将任务组件化到隔离任何可能挂起或减慢量角器速度的额外东西的程度在 运行ning 时进行测试。
出于某种原因,在 运行 测试之前安装量角器似乎总是让它们定期失败的好方法 。我们消除了这种风险,事后看来这是有道理的,但最初这样做是为了防止它用测试包弄脏构建机器。
希望有道理并能帮助到别人。
最后,前面的答案仅在允许您的测试机器保持安装 protractor
和 selenium
软件的某些情况下才有用。此外,page crash
错误似乎仍然偶尔会在机器上的资源或速度缓慢似乎妨碍构建和测试操作的情况下发生。请记住,我们采用的方法是我们的目标是让整个过程(构建、打包、单元测试和端到端测试)全部在夜间构建过程中完成。在对机器和量角器进行大量调整之后,我们决定 return 的优先事项是在每次构建后完全清理构建机器(包括删除端到端使用的工具 tests/protractor).
那么,这是问题的第二种解决方案,如果您的目标与我们的目标相同,可能会证明它更好(上面的解决方案 1 可能对其他人来说更好)。
- 第 1 步:配置量角器以使用配置文件中的
directConnect
选项。 - 第 2 步:将量角器作为软件包的一部分在本地安装。
- 第 3 步:将网络驱动程序更新为安装的 post 步。
- 第 4 步:从您的本地项目
node_modules
执行量角器,而不是从全局安装。
要完成第 1 步,您的 protractor.conf.js
应该启用 direcConnect
选项,如:
exports.config = {
directConnect: true,
...
...
...
要完成步骤 2-4,您的 package.json
文件应该有一个包含这两行的 scripts
部分(除了您在脚本中需要的任何其他内容):
"scripts": {
"postinstall": "TIMEOUT /T 10 && node ./node_modules/protractor/bin/webdriver-manager update",
"test": "TIMEOUT /T 10 && node ./node_modules/protractor/bin/protractor \"protractor.conf.js\""
},
package.json
文件的 devDependencies
部分应在本地安装量角器,如:
"devDependencies": {
...
...
"protractor": "5.1.1",
...
...
}
进行这些更改后,我们不再遇到与原始 "page crash" 错误有关的任何问题。