私がインターネットで見つけることができるすべての分度器の例は、WebURIでbrowser.get
を使用しているようです。
browser.get('http://localhost:8000');
Seleniumを使用してfile://
パスに簡単に移動し、テストを実行するためにローカルWebサーバーを実行する必要がないようにします。必要なのは、単純なHTMLページといくつかのアセットだけです。
しかし、それはうまくいかないようです。
browser.get('file:///Users/myusername/dev/mpproject/spec/support/index.html');
そのURIをブラウザウィンドウに貼り付けると、HTMLページが表示されます。分度器で開こうとすると、タイムアウトになります。
分度器を使用してこのページでテストを実行するにはどうすればよいですか?理想的な答えは、myproject
ルートからの相対ファイルパスで機能します。
私が持っている解決策を投稿しています ここにあります ファイルプロトコルで分度器を実行するのに役立ちました。
デフォルトでは、分度器は
data:text/html,<html></html>
をresetUrl
として使用しますが、location.replace
からdata:
プロトコルへのfile:
は許可されていません(「許可されていません」と表示されます)ローカルリソース」エラー)、したがって、resetUrl
をfile:
プロトコルの1つに置き換えます。
exports.config = {
// ...
baseUrl: 'file:///absolute/path/to/your/project/index.html',
onPrepare: function() {
// By default, Protractor use data:text/html,<html></html> as resetUrl, but
// location.replace from the data: to the file: protocol is not allowed
// (we'll get ‘not allowed local resource’ error), so we replace resetUrl with one
// with the file: protocol (this particular one will open system's root folder)
browser.resetUrl = 'file://';
}
// ...
};
プロジェクトフォルダへの相対パスを実行する場合は、ProtractorがNode.js環境で実行されるため、Node.jsツールを使用できます。たとえば、__dirname
は、分度器構成ファイルが保存されているディレクトリへの絶対パスを返します。結果として使用:
exports.config = {
// ...
baseUrl: 'file://' + __dirname + '/spec/support/index.html'
// ...
};
また、アプリケーションがfile:
から許可されていない一部のエンドポイントに対してXHRリクエストを実行する場合は、カスタムフラグを使用してテストブラウザを実行する必要がある場合があります。私の場合はChromeでした。
exports.config = {
// ...
capabilities: {
browserName: 'chrome',
chromeOptions: {
// --allow-file-access-from-files - allow XHR from file://
args: ['allow-file-access-from-files']
}
}
// ...
}
同じエラーが発生し、Michael Radionovの修正を適用して修正しましたが、baseUrlを削除しました。これが私の設定です:
protractor.config.js:
exports.config = {
capabilities: {
browserName: 'chrome'
},
specs: [
'*.js'
],
onPrepare: function() {
// By default, Protractor use data:text/html,<html></html> as resetUrl, but
// location.replace from the data: to the file: protocol is not allowed
// (we'll get ‘not allowed local resource’ error), so we replace resetUrl with one
// with the file: protocol (this particular one will open system's root folder)
browser.ignoreSynchronization = true;
browser.waitForAngular();
browser.sleep(500);
browser.resetUrl = 'file:///';
}
};
e2etest.js:
'use strict';
describe("Buttons' tests are started", function() {
it('Should retrieve 20 records into table', function() {
browser.get('file:///C:/Users/path_to_file/index.html');
/* Test codes here */
});
});
エラーログとは何ですか?
これは、「読み込み中」の角度に関連するものである可能性があります。そのためには、browser.driver.ignoreSynchronization = true;を試すことができます。
エラーログは、問題を理解するのに確実に役立ちます。