我似乎无法通过测试成功获得PhantomJS。我试图将其集成到我的项目中,但是在此之后失败了,我尝试仅运行基本的Angular Docs示例,但遇到了同样的问题。到目前为止,我的步骤:
npm install -g phantomjs
phantomjs --webdriver=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位。谢谢!
beforeEach
ptor
从根本上来说,此修复为我解决了相同的问题:
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); } }); });