量角器在 PhantomJS 上运行测试

Posted

技术标签:

【中文标题】量角器在 PhantomJS 上运行测试【英文标题】:Protractor running tests on PhantomJS 【发布时间】:2013-12-02 06:14:09 【问题描述】:

我似乎无法通过测试成功获得 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.'

我找到了this issue on github,这似乎是相关的。我以为我已经充分理解了他们的 brower-setup.md 以将其包含在我的 beforeEach 函数之一中。然后我发现here ptor 无论如何都只是在包装驱动程序。哇,我知道我是量角器/硒领域的菜鸟,但信噪比非常具有说服力。我真的很想获得使用 PhantomJS 的性能优势,但是为此多花几个小时的前景让我很头疼。我使用的是 Windows 7 Enterprise 64 位,以防万一。谢谢!

【问题讨论】:

相关:***.com/questions/30086961/… 【参考方案1】:

实际上,这个修复为我解决了同样的问题:

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

这里最初描述的是:https://github.com/angular/protractor/issues/85#issuecomment-26846255 renanmartins


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

【讨论】:

数小时前登陆 protractor master 的修复程序,在 protractor > 0.16.1 中应该不是问题

以上是关于量角器在 PhantomJS 上运行测试的主要内容,如果未能解决你的问题,请参考以下文章

PhantomJs安装

运行单元测试时出现语法错误后 PhantomJS 退出

无法在 Internet Explorer 11 上运行量角器

量角器:获取[DEP0018]弃用警告和测试运行随机终止

在PhantomJS上运行测试时避免使用键盘组合

量角器 - 由于 jasmine.DEFAULT_TIMEOUT_INTERVAL 导致竹测试失败