protractor 実行下でAzure AD(以下、AAD)にログインしてみた。
※AADログイン画面へのURL生成手順等は割愛。
自アプリから画面遷移してAADでログインする際、
browser.driver.sleepを使用してProtractorのコード実行タイミングを調整。
test.spec.js
'use strict';
describe('My App', function() {
// 認証情報
var EMAIL = "test@test.onmicrosoft.com";
var PASSWORD = "Abc1234567";
// AngularJSを使用していないページでのテストを許可
browser.ignoreSynchronization = true;
// AADログイン画面へのURLなどを指定、遷移するページ
var LOGIN_URL = "http://localhost:****/login";
it('Azure Login', function() {
// ログイン画面に遷移
browser.get(LOGIN_URL);
// 自アプリからAADログイン画面への遷移が完了するまで待機
browser.sleep(10000);
// メールアドレスを設定
browser.findElement(By.id("cred_userid_inputtext")).sendKeys(EMAIL)
// パスワードを設定
browser.findElement(By.id("cred_password_inputtext")).sendKeys(PASSWORD);
// Input入力直後に発生する Loading を待機
browser.sleep(2000);
// サインイン 実行
browser.findElement(By.id("cred_sign_in_button")).click();
// 自アプリのメインページ遷移完了までスリープ
browser.sleep(10000);
expect(element(by.id("loginuser")).getText()).toEqual("user name");
});
});
protractor 1.7.0
フォーム入力時に発生する Loading の最中は、サインインボタンがクリック無効になるっぽいのでsleepで回避した。
AngularJSを使用しないページで画面遷移やAjaxを待機するのに、sleepを使わない方法もあるみたい。
参考:
- Protractor の Angular 同期と Angular アプリでないページのテストについて