当前位置: 首页 > 知识库问答 >
问题:

NoSuchWindowError:GeckoDriver Firefox和Digrator(Selenium)放弃了浏览上下文

秋向阳
2023-03-14

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

环境:

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)

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
  });
});

这是我的node_modules/量角器/node_modules/webdriver-Manager/selenium/目录如下所示:

当我使用/path/to/gradutor 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

任何帮助都将不胜感激。

共有2个答案

卓学智
2023-03-14

能够使用以下配置修复此问题。

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

我们还需要在量角器conf文件中给出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\u modules/gradutor/node\u modules/webdriver manager/selenium/directory中。

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

田仲卿
2023-03-14

此错误消息...

Failed: Browsing context has been discarded

...暗示壁虎司机和木偶之间的通讯中断了。

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

  • 如果您使用了driver.navigate(). back();当Selenium的焦点在内时,导航请求会删除当前浏览上下文。

此问题的根本原因似乎是MemoryUsage。根据间歇性awsy\test_memory_usage.pyTestMemoryUsage.test_open_tabs|NoSuchWindowException:浏览上下文已被丢弃,这是间歇性的。此问题曾被标记为已解决,然后再次重新打开。

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

waitForAngularEnabled(true);

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

 类似资料:
  • 这是我的全部剧本 运行时产生: 我刚刚经历了更新的一切: 壁虎河:0.29.0 我已经搜索了几个关于同一个错误的问题,但仍然完全不知道这里的问题是什么。我几乎什么都没做。这是Selenium Python的开始示例,或者至少是开始示例的开始。

  • 我没有对我的python selenium程序做任何更改,3天前它运行良好。现在,当我尝试使用它时,我得到: 浏览上下文已被丢弃无法解码来自木偶的响应 知道代码之外的原因是什么吗?(由于未进行任何更改) 我正在使用火狐和壁虎驱动程序。在我得到这些错误后,我更新了火狐、壁虎驱动程序和硒,但没有帮助。

  • 问题内容: 我正在尝试使用量角器运行一个简单的测试脚本。 环境: 这是我的量角器配置文件。 这是我的测试脚本(todo-spec.js) 这是我的 node_modules / protractor / node_modules / webdriver-manager / selenium / 目录,如下所示: 使用进行测试时,出现以下错误。 任何帮助,将不胜感激。 问题答案: 可以使用以下配置解

  • 我正在编写一个程序,帮助我的客户从网站下载发票PDF,第一次使用。之后,程序Hibernate一定时间,醒来时开始搜索我的客户的电子邮件(使用S22 DLL),如果他找到某个电子邮件,则从电子邮件中提取链接并使用(第二次)。但这次我得到了一个例外 浏览上下文已被丢弃 我已经尽了一切可能,但最“震惊”的是,我在谷歌上找不到任何关于这个错误的东西,也没有在硒留档上找到任何东西。 我不明白这是什么意思

  • 如何在Docker中运行基于硒的测试? 我正在尝试使用Firefox和Geckodriver在Ubuntu 18 Docker镜像下运行一些Python Selenium测试。 我的docker撰写。yml文件只是: 不幸的是,大多数测试都会失败,出现以下错误: 我能找到的少数提及此错误的搜索结果表明这是因为内存不足。我正在运行测试的服务器总内存为8GB,尽管我也在32GB的机器上进行了测试并收到

  • 我有以下代码。。。 ...执行以下操作: 实例化web驱动程序 导航到页面 点击页面上的按钮,打开一个新窗口 切换到新窗口 单击新窗口中的另一个按钮 不幸的是,单击第一个按钮后,新窗口从未打开,程序终止时出现以下错误: 今天之前一切都很好,我不知道发生了什么。有什么想法吗?