私のチームは、新しいWebアプリケーションにAngularJsとPolymerコンポーネントを使用するように取り組んでいます。私はこれのためのUIオートメーションスイートを作成する方法を探しています。分度器のように多くの研究の後に、ポリマーを扱うためにいくつかの調整をして私を助けてくれるかもしれません。しかし、現在の課題は以下のとおりである -分度器の安全なログインページの処理
- は、私は私達の会社の方針の一環としてアプリ
- に移動し、すべてのWeb訪問が検証されます(同一セッション内でない限り)。検証の仕組みは次のとおりです。
- 必要なURLを入力すると、ログインページ(非偶然性)ページが表示されます。資格情報でサインインしてください
- もう1つの中間ページが表示され、ページが読み込まれるまで待つか、リンクをクリックして次のページに進みます。リンクをクリックしてください
- URLは#1に使用されている元に戻されます 注:これらの検証ページは、読み込みにかなりの時間がかかります(異なる内部URLへの変更)。また、検証は(同じセッション内で、または他のいくつかのロジックを介し)時々
をスキップし、私はこれらすべてを処理するためのプロトタイプを設計するために苦労してきました。また、プロトタイプをデザインするときにPage Objectを使用しようとしています。ここまで私がこれまで持っていたことがあります。
ここlogin.js
________________________________________________________
var currentUrl;
var lastChangedUrl;
var secureUrl = 'corplogin.ssogen2.corporate.company.com';
var getwayUrl = 'gateway.zscalertwo.net';
var loginSuite = function(driver) {
var defer = protractor.promise.defer();
describe('Handle login', function() {
/*afterEach(function() {
//driver.manage().deleteAllCookies();
})*/
//it('Login to security test', function(){
//********** Wait for page to load/URL to change to secure login page ************
driver.getCurrentUrl().then(function(url) {
currentUrl = url;
}).then(function() {
driver.wait(function() {
return driver.getCurrentUrl().then(function (url) {
lastChangedUrl = url;
return url !== currentUrl;
});
});
}).then(function() {
//********** login to secure page ************
if (lastChangedUrl.indexOf(secureUrl) > -1 || lastChangedUrl.indexOf(getwayUrl) > -1) {
var element = driver.findElement(By.name("username"));
element.sendKeys("Username");
element = driver.findElement(By.name("password"));
element.sendKeys("password"); //Give password
element = driver.findElement(By.name("submitFrm"));
element.click();
}
}).then (function() {
//********** page is slow. wait for page to load/URL to change ************
driver.getCurrentUrl().then(function(url) {
currentUrl = url;
}).then(function() {
driver.wait(function() {
return driver.getCurrentUrl().then(function (url) {
lastChangedUrl = url;
return url !== currentUrl;
});
});
}).then (function() {
//********** Click on the link to to go to test page ***********
if (lastChangedUrl.indexOf(getwayUrl) > -1) {
var element = driver.findElement(By.tagName("a"));
console.log("before click............");
element.click();
}
//********** page is slow. wait for page to load/URL to change ************
driver.getCurrentUrl().then(function(url) {
currentUrl = url;
}).then(function() {
driver.wait(function() {
return driver.getCurrentUrl().then(function (url) {
lastChangedUrl = url;
return url !== currentUrl;
});
});
})
.then (function() {
//return defer.promise;
//browser.pause();
});
}, 60000);
});
//});
}, 60000);
return defer.promise;
};
module.exports = loginSuite;
spec.js
___________________________________________________________________________
describe('Protractor Demo App', function() {
var myUrl = 'http://<my test app url>/';
var driver = browser.driver;
beforeEach(function() {
driver.get(myUrl);
});
it('should login', function() {
loginSuite(driver)
.then(
function(){
console.log("End of tests:");
expect(driver.getCurrentUrl()).toBe(myUrl);
});
});
問題 - ここ
私の期待は約束はセキュアなログインページが処理された後、私はドライバオブジェクトを使用して、他のテストを続けることができるようにspec.jsに戻り持つことです。私は、テストのために 'End of tests'メッセージを記録し、ダミー検証を行っています。しかし、その2つの行が実行されないように見えます。
安全なサイトにログインすると、元のテストページへのページの変更が表示されます。私はそれをBrowser.pause()でテストしました。しかし、ログの 'テストの終了'は決して起こらず、検証も行われません。
- 安全なログインページが表示されないシナリオを処理する必要があります。 login.jsページでどのような調整が必要かわからない
私のアプローチはページオブジェクトであり、約束事をここで処理するのは間違っていますか?私はすべてのコードがページオブジェクトのためにそれらを分割するのではなく、1つのjsファイルの下に置かれているとき、テストアプリのページでさらに一歩進んで行くことができます。ここで助けてください。
ありがとうございました。私はそれを試してみましょう。 – samge