PhantomJSをテストで正常に取得できないようです。それをプロジェクトに統合しようとしましたが、失敗した後、基本的なAngular Docsサンプルを実行しようとしましたが、同じ問題が発生します。これまでの手順:
npm install -g phantomjs
phantomjs --webdriver=9515
// ... GhostDriver-メイン-ポート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
関数の1つに含めることができたと思いました。それから私は ここptor
がとにかくドライバーをラップしているだけだとわかりました。うわー、私はここ分度器/セレンの土地の初心者であることを知っていますが、信号対雑音比は集中的に説得力があります。 PhantomJSを使用することでパフォーマンス上のメリットを享受したいのですが、これでさらに数時間を失う可能性があるため、頭が痛いです。問題が発生した場合に備えて、私はWindows 7 Enterprise64ビットを使用しています。ありがとう!
実際、この修正は私にとって同じ問題を解決していました:
https://github.com/pschwartau/protractor/commit/1eeff8b1b2e3e8f3b7c8152264411f26d4665a07
ここで最初に説明したように: https://github.com/angular/protractor/issues/85#issuecomment-26846255 by 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);
}
});
});