6

分度器でAngularアプリをテストしています。ドキュメントを調べましたが、アラートのテキストを取得する方法が見つかりません。それ自体はDOMの要素ではありません(少なくとも、私が理解できるわけではありません。アラートが発生すると、Chromeのインスペクターはそれを検査することを許可しません)。アラートのメッセージが正しいことをテストするにはどうすればよいですか? それとも、それは存在しますか?

編集

これが私のコードです。HTML:

  <button id='alertButton' data-ng-click='ngAlert()'>Button</button>

JS:

$scope.ngAlert = function(){
  window.alert('Hello');
};

分度器仕様:

  describe('alert', function(){
    var ptor = protractor.getInstance();
    beforeEach(function(){
      button = $('#alertButton');
      button.click();
    });
    it('tells the alert message', function(){
      expect(button.getText()).toEqual('Button');
    });
  });

ボタンのテキストに対して次のようにアサーションを作成すると、次のようになります。

it('tells the alert message', function(){
  expect(button.getText()).toEqual('Button');
});

合格です。しかし、次のようなアラートを読み取ろうとすると:

it('tells the alert message', function(){
  var alertDialog = ptor.switchTo().alert();
  expect(alertDialog.getText()).toEqual('Hello');
});

次のエラーが表示されます。

$ protractor spec/e2e/conf.js http://localhost:4444/wd/hubでセレンサーバーを使用.F

失敗:

1) alert は警告メッセージを伝えます Message: NoSuchAlertError: no alert open (Session info: chrome=30.0.1599.101) (Driver info: chromedriver=2.2,platform=Mac OS X 10.9.0 x86_64) (WARNING: The server did not provide任意のスタック トレース情報) コマンド期間またはタイムアウト: 3 ミリ秒 ビルド情報: バージョン: '2.35.0'、リビジョン: 'c916b9d'、時間: '2013-08-12 15:42:01' システム情報: os.name: ' Mac OS X'、os.arch: 'x86_64'、os.version: '10.9'、java.version: '1.6.0_65' セッション ID: edbaa752eb14ad45f7e961903b69a466 ドライバー情報: org.openqa.selenium.chrome.ChromeDriver Capabilities [{platform =MAC, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={chromedriverVersion=2.2}, rotatable=false, locationContextEnabled=true, version=30.0.1599.101,cssSelectorsEnabled=true、databaseEnabled=true、handlesAlerts=true、browserConnectionEnabled=false、nativeEvents=true、webStorageEnabled=true、applicationCacheEnabled=false、takeScreenshot=true}]

2.125 秒で完了 2 つのテスト、2 つのアサーション、1 つの失敗

/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1542 エラーをスローします。^ NoSuchAlertError: アラートが開かれていません

しかし、ページでテストしたところ動作し、DOM でボタンを明確に見つけることができました。では、click()機能が機能していないか、何か他のことが起こっているのでしょうか?

4

2 に答える 2

10

テスト内で、現在の分度器インスタンスを取得し、使用してダイアログ ボックスswitchTo().alert()にアクセスします。alert

var ptor = protractor.getInstance();

var alertDialog = ptor.switchTo().alert();

expect(alertDialog.getText()).toEqual("Hello");

Protractor は基本的に Selenium WebDriver の単なるラッパーであるため、私の知る限り、Selenium WebDriver でできることはすべて Protractor で実行できることに注意してください。

完全なテストを含めるように編集:

describe('Alert dialog', function () {

    var ptor = protractor.getInstance(),
        button;

    beforeEach(function () {
        // This line is necessary on my end to get to my test page.
        // browser.driver.get('http://localhost:8000/test.html');
        button = ptor.findElement(protractor.By.id('alertButton'));
        button.click();
    });

    it('tells the alert message', function () {
        var alertDialog = ptor.switchTo().alert();
        expect(alertDialog.getText()).toEqual("Hello");
    });

});

テストが実行された時点でアプリがまだ初期化されている可能性があります。これは、ダイアログが表示されていないように見える理由を説明しています。アサーションを行う前に、アプリが「準備完了」であり、実際にアラートを表示できることを確認してください。それが役立つことを願っています!

于 2013-11-09T23:21:41.457 に答える
5

ブラウザがアラートを開く/表示するまで待つ必要があります。分度器 2.2.0 を使用した例:

   var timeoutInMilliseconds = 1000;
   browser.wait(protractor.ExpectedConditions.alertIsPresent(), timeoutInMilliseconds);
   var alertDialog = browser.switchTo().alert();
   expect(alertDialog.getText()).toEqual("Hello World!");
于 2015-11-24T12:50:51.720 に答える