Angularjs NoSuchWindowError:GeckoDriver Firefox和量角器(Selenium)已放弃浏览上下文

Angularjs NoSuchWindowError:GeckoDriver Firefox和量角器(Selenium)已放弃浏览上下文,angularjs,linux,selenium,protractor,geckodriver,Angularjs,Linux,Selenium,Protractor,Geckodriver,我正在尝试使用量角器运行一个简单的测试脚本 环境: Node Version: v9.8.0 Protractor Version: 5.4.1 Angular Version: 1.x Browser(s): Mozilla Firefox 60.1.0 Operating System and Version: HELiOS release 6.10 这是我的量角器配置文件 exports.config = { specs: ['todo-spec.js'], capabiliti

我正在尝试使用量角器运行一个简单的测试脚本

环境:

Node Version: v9.8.0
Protractor Version: 5.4.1
Angular Version: 1.x
Browser(s): Mozilla Firefox 60.1.0
Operating System and Version: HELiOS release 6.10
这是我的量角器配置文件

exports.config = {
  specs: ['todo-spec.js'],
  capabilities: {
    browserName: 'firefox',
    marionette : true
  }
};
这是我的测试脚本(todo-spec.js)

这是我的节点\模块/量角器/节点\模块/webdriver manager/selenium/目录,如下所示:

当我使用
/path/to/gragrator conf.js
运行测试时,我遇到了下面提到的错误

[16:51:03] I/launcher - Running 1 instances of WebDriver
[16:51:03] I/local - Starting selenium standalone server...
[16:51:04] I/local - Selenium standalone server started at http://<ip-address>:45089/wd/hub
Started
Opening localhost
F

Failures:
1) application homepage should open homepage
  Message:
    Failed: Browsing context has been discarded
    Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:13:22.693Z'
    System info: host: 'HOSTNAME', ip: 'ip_address', os.name: 'Linux', os.arch: 'i386', os.version: '2.6.32-754.3.5.el6.x86_64', java.version: '1.8.0_181'
    Driver info: driver.version: unknown
  Stack:
    NoSuchWindowError: Browsing context has been discarded
    Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:13:22.693Z'
    System info: host: 'HOSTNAME', ip: 'ip_address', os.name: 'Linux', os.arch: 'i386', os.version: '2.6.32-754.3.5.el6.x86_64', java.version: '1.8.0_181'
    Driver info: driver.version: unknown
        at Object.checkLegacyResponse (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/error.js:546:15)
        at parseHttpResponse (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/http.js:509:13)
        at doSend.then.response (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/http.js:441:30)
        at <anonymous>
        at process._tickCallback (internal/process/next_tick.js:118:7)
    From: Task: Protractor.get(http://localhost:8080/app/) - reset url
        at thenableWebDriverProxy.schedule (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/webdriver.js:807:17)
        at ProtractorBrowser.executeScriptWithDescription (/export/home/test/protractor_test_2/node_modules/protractor/built/browser.js:404:28)
        at driver.controlFlow.execute.then.then.then (/export/home/test/protractor_test_2/node_modules/protractor/built/browser.js:679:25)
        at ManagedPromise.invokeCallback_ (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/promise.js:1376:14)
        at TaskQueue.execute_ (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/promise.js:3084:14)
        at TaskQueue.executeNext_ (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/promise.js:3067:27)
        at asyncRun (/export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/promise.js:2927:27)
        at /export/home/test/protractor_test_2/node_modules/selenium-webdriver/lib/promise.js:668:7
        at <anonymous>
        at process._tickCallback (internal/process/next_tick.js:118:7)
    From: Task: Run it("should open homepage") in control flow
        at UserContext.<anonymous> (/export/home/test/protractor_test_2/node_modules/jasminewd2/index.js:94:19)
    From asynchronous test:
    Error
        at Suite.<anonymous> (/export/home/test/protractor_test_2/todo-spec.js:2:3)
        at Object.<anonymous> (/export/home/test/protractor_test_2/todo-spec.js:1:63)
        at Module._compile (module.js:649:30)
        at Object.Module._extensions..js (module.js:660:10)
        at Module.load (module.js:561:32)
        at tryModuleLoad (module.js:501:12)

1 spec, 1 failure
Finished in 0.159 seconds

[16:51:06] I/local - Shutting down selenium standalone server.
[16:51:06] I/launcher - 0 instance(s) of WebDriver still running
[16:51:06] I/launcher - firefox #01 failed 1 test(s)
[16:51:06] I/launcher - overall: 1 failed spec(s)
[16:51:06] E/launcher - Process exited with error code 1
[16:51:03]I/launcher-运行WebDriver的1个实例
[16:51:03]I/local-正在启动selenium独立服务器。。。
[16:51:04]I/local-Selenium独立服务器在http://:45089/wd/hub上启动
起动
打开本地主机
F
失败:
1) 应用程序主页应打开主页
信息:
失败:已放弃浏览上下文
构建信息:版本:'3.14.0',修订版:'aacccce0',时间:'2018-08-02T20:13:22.693Z'
系统信息:主机:'HOSTNAME',ip:'ip_address',os.name:'Linux',os.arch:'i386',os.version:'2.6.32-754.3.5.el6.x86_64',java.version:'1.8.0_181'
驱动程序信息:驱动程序。版本:未知
堆栈:
NoSuchWindowError:已放弃浏览上下文
构建信息:版本:'3.14.0',修订版:'aacccce0',时间:'2018-08-02T20:13:22.693Z'
系统信息:主机:'HOSTNAME',ip:'ip_address',os.name:'Linux',os.arch:'i386',os.version:'2.6.32-754.3.5.el6.x86_64',java.version:'1.8.0_181'
驱动程序信息:驱动程序。版本:未知
在Object.checkLegacyResponse(/export/home/test/dragrator\u test\u 2/node\u modules/selenium webdriver/lib/error.js:546:15)
在parseHttpResponse(/export/home/test/dragrator\u test\u 2/node\u modules/selenium webdriver/lib/http.js:509:13)处
在doSend.then.response(/export/home/test/dragrator\u test\u 2/node\u modules/selenium webdriver/lib/http.js:441:30)
在
在进程中。_tick回调(内部/process/next_tick.js:118:7)
From:Task:dragor.get(http://localhost:8080/app/)-重置url
在EnableWebDriverProxy.schedule(/export/home/test/dragor\u test\u 2/node\u modules/selenium webdriver/lib/webdriver.js:807:17)中
位于gragrantorBrowser.executeScriptWithDescription(/export/home/test/grantor\u test\u 2/node\u modules/grantor/build/browser.js:404:28)
在driver.controlFlow.execute.then.then.then(/export/home/test/dragrator\u test\u 2/node\u modules/dragrator/build/browser.js:679:25)
在ManagedPromise.invokeCallback上(/export/home/test/dragrator\u test\u 2/node\u modules/selenium webdriver/lib/promise.js:1376:14)
在TaskQueue.execute处(/export/home/test/dragrator\u test\u 2/node\u modules/selenium webdriver/lib/promise.js:3084:14)
在TaskQueue.executeNext上(/export/home/test/dragrator\u test\u 2/node\u modules/selenium webdriver/lib/promise.js:3067:27)
异步运行时(/export/home/test/dragrator\u test\u 2/node\u modules/selenium webdriver/lib/promise.js:2927:27)
at/export/home/test/gradutor\u test\u 2/node\u modules/selenium webdriver/lib/promise.js:668:7
在
在进程中。_tick回调(内部/process/next_tick.js:118:7)
发件人:任务:在控制流中运行它(“应打开主页”)
在UserContext。(/export/home/test/gradutor\u test\u 2/node\u modules/jasminewd2/index.js:94:19)
从异步测试:
错误
在套房。(/export/home/test/gradutor_test_2/todo-spec.js:2:3)
反对。(/export/home/test/gradutor_test_2/todo-spec.js:1:63)
在模块处编译(Module.js:649:30)
在Object.Module.\u extensions..js(Module.js:660:10)
在Module.load(Module.js:561:32)
在tryModuleLoad时(module.js:501:12)
1个规格,1个故障
以0.159秒完成
[16:51:06]I/local-关闭selenium独立服务器。
[16:51:06]I/launcher-WebDriver的0个实例仍在运行
[16:51:06]I/launcher-firefox#01测试失败1次
[16:51:06]I/launcher-总体:1个规范失败
[16:51:06]E/启动器-进程退出,错误代码为1
任何帮助都将不胜感激

此错误消息

Failed: Browsing context has been discarded
…意味着壁虎河木偶之间的通信中断

关于GeckoDriver二进制版本的更多信息会给我们一些关于发生了什么错误的线索。但是,由于以下多种因素,该问题可能会发生:

  • 如果您使用了
    driver.navigate().back()当Selenium的焦点位于
    范围内时,观察到此错误
  • 根据,由于ctypes检查空指针顺序,也可能出现此问题。
    • 您可以找到Selenium测试用例。也许与其惊慌失措,不如通过清除任何状态并返回geckodriver再次接受新的连接来更优雅地处理这个问题
  • 根据,如果您不使用二进制文件的complient版本,也可能发生此问题
这个用例 这个问题的根本原因似乎是记忆障碍。根据其性质是间歇性的。此问题一度被标记为已解决,然后再次重新打开

正如@Madhan在使用应用程序和量角器时提到的,始终包括:

waitForAngularEnabled(true);
最后,根据使用GeckoDriver时的最佳实践,Selenium和Firefox浏览器遵循以下兼容性图表:


能够通过以下配置解决此问题

- Protractor: v5.4.1 
- Selenium JAR driver: selenium-server-standalone-3.141.59.jar 
- geckodriver:geckodriver-v0.20.0-linux64
我们还需要在量角器配置文件中给出geckodrvier的路径

geckoDriver: 'node_modules/protractor/node_modules/webdriver-manager/selenium/geckodriver-v0.20.0'
默认情况下,webdriver manager将下载geckodriver的最新版本,即0.24.0。但是需要的geckdriver是v0.20.0,所以我手动下载了它,并将其放在node_modules/dragrator/node_modules/webdriver manager/selenium/目录中


希望这对面临类似问题的人们有所帮助

添加
browser.waitForAngularEnabled(true)帮助量角器等待所有角度元素
geckoDriver: 'node_modules/protractor/node_modules/webdriver-manager/selenium/geckodriver-v0.20.0'