我们的量角器测试最近已停止处理我在dev机器/环境中无法重现的错误,但似乎经常出现在运行于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/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环境中从不失败。试图拼凑任何可能有用的线索。是否有人认为在Windows WMWare环境中运行的Chrome驱动程序可能存在问题,类似于tmux和docker情况下出现的问题?
我在这里看到了其他帖子(也没有解决方案)的一些提示:
https://sqa.stackexchange.com/questions/22707/selenium-chromedriver-in-virtual-machine
正如我所说,我已经搜索了堆栈溢出和其他论坛,发现很少指向我明确的方向。
答案 0 :(得分:0)
这是我们第一次尝试找到解决此问题的方法,避免了这个问题,但似乎并不是原始上下文中崩溃本身的解决方案。首先,一些简短的背景。我们的量角器项目的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 test
后,我们将运行npm install -g protractor
来完成端到端测试及其在构建计算机上的占用空间。我们之所以采用这种方法,是因为我们不希望它影响环境,因此构建机器(这个量程器项目正在运行)将保持对量角器的清洁。
我们采用的解决方法是永久性地在机器上完全安装量角器,并确保不在构建过程中包含它的安装/卸载。我们的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同步的钩子生命周期中给出的等待不考虑窗口实际运行的方式,因此我们必须使用start
命令启动一个单独的窗口和我们自己的本机{{ 1}}来电。
我们最终发现,似乎VM Ware在构建过程机器上不可预测地限制了资源,并且您只需要将任务组件化以隔离任何可能挂起或减慢量角器测试的额外事物。它们正在运行。
出于某种原因,在运行测试之前安装量角器似乎总是让它们定期失败的好方法。我们删除了这种风险,这在后见之明是有道理的,但最初是为了避免使用测试包弄脏构建机器。
希望有意义并帮助他人。
答案 1 :(得分:0)
最后,上一个答案仅在某些允许测试机器安装protractor
和selenium
软件的情况下才有用。此外,当机器上的资源或速度似乎妨碍构建和测试的操作时,偶然会出现page crash
错误。请记住,我们采用的方法是,我们的目标是在整个夜间构建过程中完成整个过程(构建,打包,单元测试和端到端测试)。在对机器和量角器进行了大量调整之后,我们决定在每次构建之后返回完全清理构建机器的优先级(包括删除端到端测试/量角器中使用的工具)。
这是问题的第二个解决方案,如果你的目标与我们的目标相同,可能会更好(上面的解决方案1,对其他人来说可能更好)。
directConnect
选项。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\""
},
devDependencies
文件的package.json
部分应在本地安装量角器,如:
"devDependencies": {
...
...
"protractor": "5.1.1",
...
...
}
自从进行这些更改后,我们不会再遇到原始"页面崩溃问题"错误。