2017-01-04 32 views
1

私はウェブサイトの自動化に取り組んでおり、特に問題がありました。 私は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; 
    }); 
    }; 

それが開いていた場合、私はそれを閉じて、スクリーンショットを取ることなく、そうでなければスクリーンショットを取る。 これを行うと、レポートが正しく生成され、次のスペックレポートにアラートが開いていることが記録されます。

これは誰かに役立つことを期待しています。

答えて

1

あなたはジャスミンfail function

browser.switchTo().alert().then(function(alert) { 
    alert.accept(); 
    }, function(err) { 
    if (err.code == webdriver.error.ErrorCode.UNEXPECTED_ALERT_OPEN) { 
     fail('Fail this spec'); 
    } 
    }); 
+1

「webdriver.error.ErrorCode」は廃止されました。 – cnishina

+0

@cnishinaうーん、面白いことに、私はそれを知らなかった。私はそれが私たちのコードベースで使われているのを見ましたが、実際にはそれをチェックすることは決してできません。これは何が使用されるか、これも廃止予定ですhttp://definitelytyped.org/docs/angular-protractor--angular-protractor/classes/protractor.error.errorcode.html – BarretV

+1

私たちはビットサイドを取得するつもりです元のアラートの問題から最初に、分度器は現在 'webdriver.error.ErrorCode'を使用しています。 Selenium-webdriverはそれを廃止し、次のバージョンのProtractor(この日の終わりまでにうまくいけばリリースされるでしょう)は、 'ErrorCode'を持っていません。あなたが分度器5.0.0+に移動すると頭が上がります。第2に、DefintelyTyped角度分度器プロジェクトの使用は避けています。型は4.0.0+以来、分度器でサポートされていたからです。 – cnishina

0

これは、あなたのテスト分度器テストが完全に失敗し、分度器が動作しなくなったということである奇数を経由してこれらのError codesをチェックし、失敗を強制することができるはずです。この場合、分裂器の問題を自由に開いてください。

私の推測では、itスペックが失敗し、他のテストが動作しなくなるという警告が表示されていると思います。

各テスト後にブラウザを再起動してくださいconfigを参照)。これにより、ドライバセッションが終了し、新しいブラウザインスタンスが作成されます。あなたが想像するように、これはあなたのテストを遅くするでしょう。お使いの設定セットでは:

restartBrowserBetweenTests: true 

postTestpluginを使用してみてください。 postTestを使用してテストが失敗したかどうかを確認し、アラートがあるかどうかを確認して閉じてください。

postTest: function(passed, testInfo) { 
    if (!passed) { 
    // should check to see if there is an alert 

    // close the alert 
    return browser.switchTo().alert().then(function (alert) { 
     return alert.accept(); 
    }); 
    } 
} 
+0

ありがとうございます...私は間違いなくこれを試してみます。 –

+0

どうしたらいいか教えてください。また、それが価値があるものについては、分度器はアラートに関する同様の問題も見ています。詳細はこちらをご覧ください:https://github.com/angular/protractor/issues/3925 – cnishina

関連する問題