現在、ユーザー名/パスワードを入力して「サインイン」をクリックする部分的なエンドツーエンドのテストがあります。
それは正常に行われますが、ブラウザー経由でログインした場合のように、「アカウントポータル」または「ダッシュボード」にリダイレクトされるのではなく、「ログインしました」ページで終了します。
このプロジェクトは初めてですが、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分度器。
編集-これを少し要約:
(ユーザーがブラウザから手動でログインすると、/ thankyoページが表示されません。これは/ dashboardへのクイックリダイレクトです。分度器はダッシュボードページに到達しません。 。
あなたの投稿には情報がありませんが、私は仮定をしようとします:
あなたの「ログインありがとうございます」ページがタイムアウト後にjavascriptリダイレクトを行うと思われます。
したがって、「ログイン」をクリックすると、ブラウザーは「ログインしました」ページをロードします。.then()
の2番目のパラメーターは何もしないため、=がないためbrowser.waitForAngular()
は失敗しますangularそのページ。
URLの変更を検出するには、合理的なタイムアウトでbrowser.driver.wait()
のようなものを使用する必要があります(ここで説明します: https://github.com/angular/protractor/issues/61 )ブラウザが_/success
_ページに到達した後にbrowser.waitForAngular()
をトリガーします。
明示的な待機を使用してみましたか?
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);