Chrome.fileSystem.chooseEntry APIを使用してディレクトリを選択するChromeアプリケーションをテストするためのSeleniumスクリプトを作成しています。これを手動で行うとうまく動作します。私はセレンのスクリプトでこれを行うときには、私は戻って、このエラーを取得する:selenium + chrome.fileSystem.chooseEntry =無効な呼び出しページエラー
Unchecked runtime.lastError while running fileSystem.chooseEntry: Invalid calling page. This function can't be called from a background page.
セレン及びchooseEntryがうまく一緒に遊ぶようにする方法上の任意のアイデア?
最新のChromedriverに更新されましたが、運がまだありません。私もChromeOptionsを見ましたが、役に立つと思われるものは見られませんでした。 SeleniumとchooseEntryについて、インターウェブにはあまり言わないようです。私はChromeのバージョン51を使用しています。
私は、chooseEntryを使用する代わりに、テストのパス値を設定するために特別なjavascriptエントリポイントが必要になると思っています。しかし、テスト用に別々のコード実行パスを持たないことを強く望みます。誰もよりクリーンなソリューションを持っていますか?
EDITは:
chrome.fileSystem.chooseEntry({type:'openDirectory'},function(entry) {
chrome.fileSystem.getWritableEntry(entry,function(writeable_entry) {
console.log("got writeable entry");
});
}, function(e) { errorHandler(e); });
EDIT#2:私は、特別なjavascriptのエントリポイントハックを行ってきたコメント投稿者の要求ごとに、ここに問題のあるコードです。 Manualモード(つまり、Seleniumで実行していないモード)では、chooseEntryを実行するコードを実行してから、retainEntry APIを使用してエントリIDを取得します。私はエントリIDを取得し、それをエントリに戻すためにrestoreEntry APIを呼び出すために、私のjavascriptにエントリポイントを追加しました。私は自分のコードを変更して、このエントリオブジェクトが設定されている場合は、chooseEntryを呼び出す代わりにファイルとして使用します。最後に、残りのスクリプトを実行する前に、restoreEntryエントリポイントを呼び出すようにSeleniumスクリプトを修正しました。
これは理想的ではありません。私のテストコードの実行パスは、私の実際の人間が実際にコントロールしているコードの実行パスとは多少異なるからです。しかし、少なくとも今はSeleniumスクリプトを使うことができます。もちろん、誰もがこの解決策を解決するための無頓着な方法を考えることができるなら、私はそれについて聞いてみたいと思います。
EDIT#3:Per Xanのコメントで、「拡張」から「Chromeアプリケーション」への用語を修正しました。
コードの一部を提供できますか? – user2272115
'chrome.fileSystem' **は拡張APIではありません**、Chromeアプリケーションでのみ使用できます。あなたは何を書いていますか? – Xan
おっと、あなたは100%正しいです。私は、正しい用語を使用するために投稿を更新しました。これを指摘してくれてありがとう。 – codemonkey