Ril*_*ark 18 oauth angularjs angularjs-e2e protractor
我有一个Angular应用程序需要与Google进行身份验证,授予一些范围等,我正在尝试为它设置自动e2e测试.我的量角器一般都适合我,但是当我们进入google auth页面,登录并重定向时,量角器未通过测试,因为"文档在等待结果时被卸载".
在每次测试之前,我是否可以使用工具或技术对开发Google帐户进行身份验证?
如果我可以让框架保持一秒,而普通的webdriver驱动登录,并且只有在我到达目标页面后才真正激活角度内容,那将是完美的!
Ril*_*ark 20
关键是在使用特定于角度的命令之前使用browser.driver.get而不是browser.get用于browser.driver.sleep(someMilliseconds)在最终目的地进行角度加载.
这是我的工作量角器规范首先授权给Google,然后计算转发器中的项目:
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('user@googleappsdomain.com');
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);
});
});
Run Code Online (Sandbox Code Playgroud)
我有一个Google Auth页面对象(下面)为我完成整个工作.
这里的关键是"isAngularSite(false);" 如果我们进入'angular'或'non angular'网站,函数巫婆会指示webdriver.(以下实施).
/* global element, browser, by */
'use strict';
var GOOGLE_USERNAME = 'my.account@google.com';
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();
Run Code Online (Sandbox Code Playgroud)
---把它扔进protractor.conf.js
onPrepare: function () {
global.isAngularSite = function (flag) {
console.log('Switching to ' + (flag ? 'Asynchronous' : 'Synchronous') + ' mode.')
browser.ignoreSynchronization = !flag;
},
global.BROWSER_WAIT = 5000;
}
Run Code Online (Sandbox Code Playgroud)
---这就是你如何使用它:
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('my.account@google.com');
done();
});
});
});
Run Code Online (Sandbox Code Playgroud)
您应该使用waitForAngularEnabled量角器来启用/禁用等待 Angular 任务。默认情况下它将被启用。您可以使用以下内容:
// do things on your Angular application
// go to external oauth page
waitForAngularEnabled(false)
// login on oauth page and redirect to your Angular application
waitForAngularEnabled(true)
browser.get('/home') // this is a page from your Angular application
Run Code Online (Sandbox Code Playgroud)
waitForAngularEnabled返回一个承诺。该browser.get函数会阻塞,直到加载 Angular 页面。
| 归档时间: |
|
| 查看次数: |
10837 次 |
| 最近记录: |