NoSuchWindowError: Browsing context has been discarded with GeckoDriver Firefox and Protractor(Selenium)

試著忘記壹切 提交于 2020-04-05 05:16:01

问题


I'm trying to run a simple test script using protractor.

Environment:

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

Here's my protractor config file.

exports.config = {
  specs: ['todo-spec.js'],
  capabilities: {
    browserName: 'firefox',
    marionette : true
  }
};

This is my test script (todo-spec.js)

describe('application homepage', function() {
  it('should open homepage', function() {
    console.log("Opening localhost app");
    browser.get('http://localhost:8080/app/');
    browser.sleep(20000); // just to check if application loaded or not
  });
});

This is my node_modules/protractor/node_modules/webdriver-manager/selenium/ directory looks like:

When I run my test using /path/to/protractor conf.js, I'm getting below mentioned error.

[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

Any help would be appreciated.


回答1:


This error message...

Failed: Browsing context has been discarded

...implies that the communication between GeckoDriver and Marionette was broken.

Some more information regarding the GeckoDriver binary version would have given us some clues about whats wrong happening. However this issue can happen due to multiple factors as follows:

  • As per Hang when navigation request removes the current browsing context if you have used driver.navigate().back(); when Selenium's focus was within an <iframe> this error is observed.
  • As per Crash during command execution results in "Internal Server Error: Failed to decode response from marionette" this issue can also occur due to ctypes checks for NULL pointer derefs.
    • You can find the Selenium testcase here. Perhaps instead of panicking, it would have been better to handle this more gracefully by clearing any state and returning geckodriver to accept new connections again.
  • As per Failed to decode response from marionette - Error to open Webdriver using python this issue can also occur if you are not using the complient version of the binaries.

This usecase

The root cause of this issue seems to be MemoryUsage. As per Intermittent awsy\test_memory_usage.py TestMemoryUsage.test_open_tabs | NoSuchWindowException: Browsing context has been discarded which is intermittent in nature. This issue was once marked as RESOLVED then again REOPENED.

As @Madhan mentioned while working with AngularJS applications and Protractor always include:

waitForAngularEnabled(true);

Finally, as per best practices while working with GeckoDriver, Selenium and Firefox Browser follow the below compatibility chart:

Supported platforms




回答2:


Was able to fix this issue with below configuration.

- Protractor: v5.4.1 
- Selenium JAR driver: selenium-server-standalone-3.141.59.jar 
- geckodriver:geckodriver-v0.20.0-linux64

Also we need to give path of geckodrvier in protractor conf file.

geckoDriver: 'node_modules/protractor/node_modules/webdriver-manager/selenium/geckodriver-v0.20.0'

By default webdriver-manager will download latest version of geckodriver which is 0.24.0. But the needed geckdriver is v0.20.0, so I downloaded this manually and placed it inside node_modules/protractor/node_modules/webdriver-manager/selenium/ directory.

Hope this helps to people facing similar issue.



来源:https://stackoverflow.com/questions/54515173/nosuchwindowerror-browsing-context-has-been-discarded-with-geckodriver-firefox

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!