私はウェブサイトの自動化に取り組んでおり、特に問題がありました。 私はgulpよりも上の分度器を使って自動テストを実行し、gulpタスクに含まれるレポートジェネレータも使用しています。投射器でUnexpectedAlertOpenErrorを処理する方法
クロームによってアラートがトリガされると、分度器は停止し、コンソールで「UnexpectedAlertOpenError」をスローし、テストの実行を停止してレポートの生成をキャンセルします。
スペックを失敗させて残りのスイートを実行する方法があるかどうかを知りたいと思います。
私はあなたがこれを行うことができます知っている:
browser.get(url).catch(function() {
return browser.switchTo().alert().then(function (alert) {
alert.accept();
return browser.get(url);
});
});
をしかし、私は分度器が警告を閉じていき、私はそれを思い付いたテストに失敗したい、とのエラーメッセージを返すようにしたくありません実行を続行します。
これを行う方法はありますか? catch関数に例外を渡してメッセージを返すことは可能ですか?私はそのキャッチメソッドに関するドキュメントを見つけることができませんでした。
ありがとうございました!
EDIT:コンソール上でスタックトレースを行った後、仕様が失敗したように分度器が検出したことがわかりました。例外は、スクリーンショットを撮るときにレポーターから来ています(私は、 jasmine2-html-reporter) 誰かが何かを見つけ出すことができるように、私はスタックトレースのビットを貼り付けます。私は本当に失われています。
E/launcher - UnexpectedAlertOpenError: unexpected alert open: {Alert text : You have pending changes}
From: Task: WebDriver.takeScreenshot()
EDIT2:私の実装で実際の問題が見つかりました。 npmプラグインprotractor-jasmine2-html-reporter(私が使用している)は、アラートが開いているときにスクリーンショットを撮ろうとしていたため、webdriverが壊れてレポートが生成されないようにしていました。
私はこれが彼らのリポジトリから、アラートが開いていたかどうかを確認し、それがあった場合は、スクリーンショットを撮る避けるスクリーンショットを取るしようとする前にフォークすることでした解決するためにやった:
function alertIsPresent() {
return browser.driver.switchTo().alert()
.then(function (alert) {
alert.accept();
return true;
}, function (err) {
return false;
});
};
それが開いていた場合、私はそれを閉じて、スクリーンショットを取ることなく、そうでなければスクリーンショットを取る。 これを行うと、レポートが正しく生成され、次のスペックレポートにアラートが開いていることが記録されます。
これは誰かに役立つことを期待しています。
「webdriver.error.ErrorCode」は廃止されました。 – cnishina
@cnishinaうーん、面白いことに、私はそれを知らなかった。私はそれが私たちのコードベースで使われているのを見ましたが、実際にはそれをチェックすることは決してできません。これは何が使用されるか、これも廃止予定ですhttp://definitelytyped.org/docs/angular-protractor--angular-protractor/classes/protractor.error.errorcode.html – BarretV
私たちはビットサイドを取得するつもりです元のアラートの問題から最初に、分度器は現在 'webdriver.error.ErrorCode'を使用しています。 Selenium-webdriverはそれを廃止し、次のバージョンのProtractor(この日の終わりまでにうまくいけばリリースされるでしょう)は、 'ErrorCode'を持っていません。あなたが分度器5.0.0+に移動すると頭が上がります。第2に、DefintelyTyped角度分度器プロジェクトの使用は避けています。型は4.0.0+以来、分度器でサポートされていたからです。 – cnishina