我有一個角度的應用程序,要求與谷歌認證,一些示波器等發放,我試圖建立自動端到端測試它。我有量角器一般工作對我來說很好,但是當我們到了谷歌AUTH頁面,登錄名和重定向,量角器測試失敗,因爲「在等待結果的文件卸載。」E2E量角器測試需要OAuth認證
是否有工具或技術,我可以用它來驗證到發展谷歌帳戶beforeEach測試?
如果我能得到的框架,舉行了第二次,而普通老式硬盤的webdriver登錄,只有真正激活角的東西后,我去我的目標網頁,這將是完美的!
我有一個角度的應用程序,要求與谷歌認證,一些示波器等發放,我試圖建立自動端到端測試它。我有量角器一般工作對我來說很好,但是當我們到了谷歌AUTH頁面,登錄名和重定向,量角器測試失敗,因爲「在等待結果的文件卸載。」E2E量角器測試需要OAuth認證
是否有工具或技術,我可以用它來驗證到發展谷歌帳戶beforeEach測試?
如果我能得到的框架,舉行了第二次,而普通老式硬盤的webdriver登錄,只有真正激活角的東西后,我去我的目標網頁,這將是完美的!
關鍵是使用browser.driver.get
而不是browser.get
,並使用browser.driver.sleep(someMilliseconds)
在使用角度特定命令之前讓角度加載到最終目的地。
這是我的工作量角器規範,首先授權谷歌和然後計算在中繼器中的項目:
it('allows the user to add new slides', function() {
browser.driver.get('http://localhost:3000/editor/?state=%7B"action":"create"%7D');
// at this point my server redirects to google's auth page, so let's log in
var emailInput = browser.driver.findElement(by.id('Email'));
emailInput.sendKeys('[email protected]');
var passwordInput = browser.driver.findElement(by.id('Passwd'));
passwordInput.sendKeys('pa$sWo2d'); //you should not commit this to VCS
var signInButton = browser.driver.findElement(by.id('signIn'));
signInButton.click();
// we're about to authorize some permissions, but the button isn't enabled for a second
browser.driver.sleep(1500);
var submitApproveAccess = browser.driver.findElement(by.id('submit_approve_access'));
submitApproveAccess.click();
// this nap is necessary to let angular load.
browser.driver.sleep(10000);
// at this point the protractor functions have something to hook into and
// will work as normal!
element(by.id('new-slide-dropdown-trigger')).click();
element(by.id('new-text-slide-trigger')).click();
var slideList = element.all(by.repeater('slide in deck.getSlides()'));
slideList.then(function(slideElements) {
expect(slideElements.length).toEqual(1);
});
});
我有一個谷歌驗證頁面對象(如下圖),做整個工作對我來說。
這裏的關鍵是 「isAngularSite(假);」如果我們進入'角度'或'非角度'網站,功能女巫會指示webdriver。 (下面的實施)。
/* global element, browser, by */
'use strict';
var GOOGLE_USERNAME = '[email protected]';
var GOOGLE_PASSWORD = 'password';
var ec = protractor.ExpectedConditions;
var Google = function() {
this.emailInput = element(by.id('Email'));
this.passwordInput = element(by.id('Passwd'));
this.nextButton = element(by.id('next'));
this.signInButton = element(by.id('signIn'));
this.approveAccess = element(by.id('submit_approve_access'));
this.loginToGoogle = function() {
var self = this;
/* Entering non angular site, it instructs webdriver to switch
to synchronous mode. At this point I assume we are on google
login page */
isAngularSite(false);
this.emailInput.sendKeys(GOOGLE_USERNAME);
this.nextButton.click();
this.passwordInput.isPresent().then(function() {
browser.wait(ec.visibilityOf(self.passwordInput), BROWSER_WAIT).then(function() {
self.passwordInput.sendKeys(GOOGLE_PASSWORD);
self.signInButton.click();
browser.wait(ec.elementToBeClickable(self.approveAccess), BROWSER_WAIT).then(function() {
self.approveAccess.click();
/* Now we are being redirected to our app, switch back to
async mode (page with angular) */
isAngularSite(true);
});
});
});
}
}
module.exports = new Google();
---拋出此爲protractor.conf.js
onPrepare: function() {
global.isAngularSite = function (flag) {
console.log('Switching to ' + (flag ? 'Asynchronous' : 'Synchronous') + ' mode.')
browser.ignoreSynchronization = !flag;
},
global.BROWSER_WAIT = 5000;
}
---這就是你將如何使用它:
it('should login though google', function(done) {
mainPage.loginBtn.click().
then(function() {
loginPage.connectWithGoogleBtn.click();
googlePage.loginToGoogle();
browser.wait(mainPage.userName.isPresent()).
then(function() {
expect(mainPage.userName.getText()).
toEqual('[email protected]');
done();
});
});
});
感謝,幫助有類似的問題,我有 – flaky
我會在量角器測試中使用滲流作爲最後一個資源。 – demee
不是睡了一個不確定的時間,爲什麼不等待元素在DOM改變? – LeeGee