一尘不染

量角器在PhantomJS上运行测试

selenium

我似乎无法通过测试成功获得PhantomJS。我试图将其集成到我的项目中,但是在此之后失败了,我尝试仅运行基本的Angular
Docs示例,但遇到了同样的问题。到目前为止,我的步骤:

  • npm install -g phantomjs
  • phantomjs --webdriver=9515 // … GhostDriver-Main-在端口9515上运行
  • protractor protractorConf.js

这是与示例中相同的文件,仅具有browserName,并且seleniumAddress端口已更改:

// An example configuration file.
exports.config = {
  // The address of a running selenium server.
  seleniumAddress: 'http://localhost:9515',

  // Capabilities to be passed to the webdriver instance.
  capabilities: {
    'browserName': 'phantomjs'
  },

  // Spec patterns are relative to the current working directly when
  // protractor is called.
  specs: ['onProtractorRunner.js'],

  // Options to be passed to Jasmine-node.
  jasmineNodeOpts: {
    showColors: true,
  }
};

我收到以下错误消息:

UnknownError: Error Message => 'Detected a page unload event; asynchronous script execution does not work across page loads.'

在github上发现了这个问题,这似乎是相关的。我以为我对他们的brower-
setup.md
足够了解,可以将其包含在我的beforeEach功能之一中。然后我发现这里
ptor无论如何只是包装驱动程序。哇,我知道我在量角器/selenium土地上是个菜鸟,但是信噪比令人信服。我真的很想使用PhantomJS来获得性能上的好处,但是在此上浪费更多时间的前景正伤着我的头。如果有问题,我使用的是Windows
7 Enterprise 64位。谢谢!


阅读 282

收藏
2020-06-26

共1个答案

一尘不染

从根本上来说,此修复为我解决了相同的问题:

https://github.com/pschwartau/protractor/commit/1eeff8b1b2e3e8f3b7c8152264411f26d4665a07

如此处最初所述:renanmartins的https://github.com/angular/protractor/issues/85#issuecomment-26846255


内部protractor / lib / protractor.js替换

this.driver.get('about:blank');
this.driver.executeScript(
    'window.name = "' + DEFER_LABEL + '" + window.name;' +
    'window.location.href = "' + destination + '"');

  var driver = this.driver;
  this.getCapabilities().then(function (capabilities) {
    if (capabilities.caps_.browserName === 'phantomjs') {
      driver.executeScript('window.name = "' + DEFER_LABEL + '" + window.name;');
      driver.get(destination);
    } else {
      driver.get('about:blank');
      driver.executeScript(
          'window.name = "' + DEFER_LABEL + '" + window.name;' +
          'window.location.href = "' + destination + '"');
    }

    // Make sure the page is an Angular page.
    driver.executeAsyncScript(clientSideScripts.testForAngular, 10).
      then(function(hasAngular) {
        if (!hasAngular) {
          throw new Error('Angular could not be found on the page ' +
              destination);
        }
      });
  });
2020-06-26