在WMWare中运行的量角器/Selenium失败:未知错误:由于页面崩溃而删除了会话

在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

我们的量角器测试最近停止工作,出现了一个错误,我无法在我的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/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",
...
...
  }