web-dev-qa-db-ja.com

分度器e2eがログインリダイレクトをテストする

現在、ユーザー名/パスワードを入力して「サインイン」をクリックする部分的なエンドツーエンドのテストがあります。

それは正常に行われますが、ブラウザー経由でログインした場合のように、「アカウントポータル」または「ダッシュボード」にリダイレクトされるのではなく、「ログインしました」ページで終了します。

このプロジェクトは初めてですが、OAuthを使用しています。

主な質問:これはhttpモックの必要性のように聞こえますか?

詳細:

spec.js

describe('login page', function() {
    browser.driver.get('http://url.path/login');
    it('should render login page', function() {

      // Checking the current url
      var currentUrl = browser.driver.getCurrentUrl();
      expect(currentUrl).toMatch('/login');
    });
    it('should sign in', function() {

      // Find page elements
      var userNameField = browser.driver.findElement(By.id('username'));
      var userPassField = browser.driver.findElement(By.id('password'));
      var userLoginBtn  = browser.driver.findElement(By.id('loginbtn'));

      // Fill input fields
      userNameField.sendKeys('[email protected]');
      userPassField.sendKeys('1234');

      // Ensure fields contain what we've entered
      expect(userNameField.getAttribute('value')).toEqual('[email protected]');
      expect(userPassField.getAttribute('value')).toEqual('1234');

      // Click to sign in - waiting for Angular as it is manually bootstrapped.
      userLoginBtn.click().then(function() {
        browser.waitForAngular();
        expect(browser.driver.getCurrentUrl()).toMatch('/success');
      }, 10000);
    });
});

テストウィンドウをすばやくクリックすると、「成功」ページに正常に到達することがわかりますが、ダッシュボードにリダイレクトされません(ブラウザーから手動でサインインするとリダイレクトされます)。このテストを継続してサインインしたまま、ユーザーのようにダッシュボードにアクセスするにはどうすればよいですか?

//プロジェクトの新規、angularおよびand分度器。

編集-これを少し要約:

  • 分度器で/ loginページでテストを開始したい
  • 分度器は、ユーザー名とパスワードのフィールドを見つけて入力し、「ログイン」をクリックします。
  • 分度器は正常にログインして、/ thankyoページを表示し、すぐにユーザーの/ dashboardページにリダイレクトします。
  • ステップが欠落している可能性があります。分度器テストで手動でリダイレクトする必要がありますか?

(ユーザーがブラウザから手動でログインすると、/ thankyoページが表示されません。これは/ dashboardへのクイックリダイレクトです。分度器はダッシュボードページに到達しません。 。

15
bruh

あなたの投稿には情報がありませんが、私は仮定をしようとします:

あなたの「ログインありがとうございます」ページがタイムアウト後にjavascriptリダイレクトを行うと思われます。

したがって、「ログイン」をクリックすると、ブラウザーは「ログインしました」ページをロードします。.then()の2番目のパラメーターは何もしないため、=がないためbrowser.waitForAngular()は失敗しますangularそのページ。

URLの変更を検出するには、合理的なタイムアウトでbrowser.driver.wait()のようなものを使用する必要があります(ここで説明します: https://github.com/angular/protractor/issues/61 )ブラウザが_/success_ページに到達した後にbrowser.waitForAngular()をトリガーします。

7
Eugene

明示的な待機を使用してみましたか?

    return browser.driver.wait(function() {
        return browser.driver.getCurrentUrl().then(function(url) {
            return /success/.test(url);
        });
    }, 10000);

あなたのコードは次のようになります:

  // Click to sign in - waiting for Angular as it is manually bootstrapped.
  userLoginBtn.click();
  return browser.driver.wait(function() {
        return browser.driver.getCurrentUrl().then(function(url) {
            return /success/.test(url);
        });
  }, 10000);
2
flaviomeira10