在WMWare中运行的量角器/Selenium失败:未知错误:由于页面崩溃而删除了会话
我们的量角器测试最近停止工作,出现了一个错误,我无法在我的dev machine/env中重现,但在运行在VMWare(ESxI)环境中的Jenkins构建/测试机器上似乎经常发生 发生的错误如下:在WMWare中运行的量角器/Selenium失败:未知错误:由于页面崩溃而删除了会话,selenium,jenkins,protractor,vmware,selenium-chromedriver,Selenium,Jenkins,Protractor,Vmware,Selenium Chromedriver,我们的量角器测试最近停止工作,出现了一个错误,我无法在我的dev machine/env中重现,但在运行在VMWare(ESxI)环境中的Jenkins构建/测试机器上似乎经常发生 发生的错误如下: 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
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驱动程序访问一些额外的资源,以便它能够完成其工作。例如:
(名单还在继续)
令人沮丧的是,这是一个已经运行了好几个星期的测试集,现在它崩溃了。它在非VMWare环境中从不发生故障。试图拼凑出任何可能有用的线索。是否有人认为Chrome驱动程序在Windows WMWare环境中运行时会出现类似于tmux和docker环境中出现的问题
我在这里的其他帖子(也没有决议)上看到了这种可能性的一些暗示:
正如我所说,我浏览了stackoverflow和其他论坛,没有发现什么可以为我指明方向的东西。这是我们第一次尝试找到解决这个问题的方法,它避免了问题,但在最初的环境中似乎并不是崩溃本身的解决方案。首先,简要介绍一下背景。我们的量角器项目的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
脚本可能会因您的操作系统而略有不同)
在构建过程中完成npm测试
后,我们将运行npm安装-g量角器
以结束端到端测试及其在构建机器上的足迹。我们采用这种方法的原因是为了使构建机器(这个量角器项目运行在其中)保持与量角器的清洁,因为我们不希望它影响环境
我们采用的解决方法是现在将量角器永久性地完全安装在机器上,并确保在构建过程中不包括量角器的安装/卸载。我们的package.json
scripts部分的相关部分现在如下所示
"scripts": {
"pretest": "start \"SeleniumServer\" webdriver-manager start",
"test": "TIMEOUT /T 10 && protractor \"protractor.conf.js\"",
"posttest": "TIMEOUT /T 10 && webdriver-manager shutdown"
},
其次,我们添加了(如您所见)超时,以等待selenium服务器完全启动,测试完全完成,然后selenium服务器完全关闭。在命令的预测试/测试/测试后同步的挂接生命周期中给出的等待没有考虑windows实际运行的方式,因此我们必须使用start
命令启动一个单独的窗口和我们自己的本机TIMEOUT
调用
我们最终发现,VM-Ware似乎不可预测地限制了构建过程机器上的资源,您只需将任务组件化,以隔离任何额外的东西,这些东西可能会在运行量角器测试时挂起或减慢它们
出于某种原因,在运行测试之前安装量角器似乎是让测试定期失败的好方法。我们消除了这种风险,这在事后看来是有道理的,但最初这样做是为了防止它用测试包弄脏构建机器
希望这是有意义的,并且对其他人有帮助。最后,前面的答案只在允许您的测试机器保持
量角器和selenium
软件安装的某些情况下有用。此外,页面崩溃
错误似乎仍然会在偶尔出现的情况下发生,此时机器上的资源或速度缓慢似乎会妨碍构建和测试的操作。请记住,我们采取的方法是,我们的目标是让整个过程(构建、打包、单元测试和端到端测试)都在夜间构建过程中完成。在对机器和量角器进行了大量的调整之后,我们决定在每次构建之后(包括移除端到端测试/量角器中使用的工具)重新彻底清理构建机器是一个优先事项
因此,这是问题的第二个解决方案,如果您的目标与我们的目标相同,可能会更好(上面的解决方案1可能会对其他人更好)
- 步骤1:将量角器配置为使用配置文件中的
directConnect
选项
- 步骤2:将量角器作为软件包的一部分本地安装
- 步骤3:更新webdriver作为安装后的一个步骤
- 步骤4:从本地项目
节点\u模块执行量角器,而不是从全局安装执行
要完成步骤1,您的dragrator.conf.js
应该启用direcConnect
选项,如所示:
exports.config = {
directConnect: true,
...
...
...
要完成步骤2-4,您的package.json
文件应该有一个scripts
部分,其中包含以下两行内容(除了脚本中需要的任何内容):
package.json
文件的devDependencies
部分应在本地安装量角器,如下所示:
"devDependencies": {
...
...
"protractor": "5.1.1",
...
...
}
由于进行了这些更改,我们不再存在原始“页面崩溃”错误的任何问题。经历了同样的问题,几个月来工作正常的测试切换到在vmware上运行,并开始随机崩溃。你解决问题了吗?
"devDependencies": {
...
...
"protractor": "5.1.1",
...
...
}