Javascript 量角器测试脚本的执行速度比页面加载速度快
我正在自动化一个有登录功能的angular js网站。我只想点击登录链接,输入用户名和密码。但不知何故,我的脚本执行速度比页面加载速度快得多。请就如何处理这一问题向我提供建议: 我的登录页对象是:Javascript 量角器测试脚本的执行速度比页面加载速度快,javascript,angularjs,selenium,selenium-webdriver,protractor,Javascript,Angularjs,Selenium,Selenium Webdriver,Protractor,我正在自动化一个有登录功能的angular js网站。我只想点击登录链接,输入用户名和密码。但不知何故,我的脚本执行速度比页面加载速度快得多。请就如何处理这一问题向我提供建议: 我的登录页对象是: 'use strict' // Normal Login require('../page-objects/loginPage.js'); var customerPortalHome = function () { this.clickSignIn = function () {
'use strict'
// Normal Login
require('../page-objects/loginPage.js');
var customerPortalHome = function () {
this.clickSignIn = function () {
browser.sleep(5000);
element(by.linkText('Sign In')).click();
browser.waitForAngular();
browser.sleep(2000);
return require('./loginPage.js');
}
}
module.exports = new customerPortalHome();
我的测试规范是
var co = require('co');
var UI = require('./ui.js');
var ui = new UI();
var CustomerPage = require('../page-objects/customerPortalHome.js')
describe(" Smoke Test Login to the application", function () {
it("test", co.wrap(function* () {
var EC = protractor.ExpectedConditions;
browser.get(ui.createStartLink());
expect(browser.getTitle()).toContain("Portal");
// Verify if user is able to Login into the application
var loginPage = CustomerPage.clickSignIn();
loginPage.switchToFrame('account-sdk');
var reportPage = loginPage.clickLogin('$$$$$@gmail.com', '$$$$$');
expect(browser.getCurrentUrl()).toContain('reports');
reportPage.clickSignOut();
expect(browser.getCurrentUrl()).toContain("?signout");
browser.sleep(800);
}));
});
每当我执行测试时,浏览器都会打开一秒钟,然后关闭
我的Onprepare方法如下所示:
beforeLaunch: function () {
return new Promise(function (resolve) {
reporter.beforeLaunch(resolve);
});
},
onPrepare: function () {
browser.manage().timeouts().implicitlyWait(5000);
afterEach(co.wrap(function* () {
var remote = require('protractor/node_modules/selenium-webdriver/remote');
browser.driver.setFileDetector(new remote.FileDetector());
}));
使用浏览器睡眠从来都不是一个好主意。最好的做法是等待一个元素,然后使用then函数来执行此操作
element(by.xpath("xpath")).click().then(function(){
var list = element(by.id('id'));
var until = protractor.ExpectedConditions;
browser.wait(until.presenceOf(list), 80000, 'Message: took too long');
});
通常,我使用此等待。您是否使用IgnoreSynchronization而不将false放在页面对象帮助程序中的某个位置 小心,当有很多重定向时,登录有时会破坏waitForAngular。我最终使用了一个脏睡眠来等待在登录时加载页面(没有找到其他解决方案,ignoreSync、更改url的EC和等待元素都不是有效的解决方案)
您还应该分享您得到的错误。是的,量角器在角度测量时发光很快。如果我们需要放慢速度,我们可以利用睡眠。。。。是的…但我想知道为什么我的隐式等待不起作用…看起来像是你在改变框架。。在改变框架后,我们能否实施上述解决方案?
browser.wait(protractor.ExpectedConditions.visibilityOf($$('.desk-sidebar > li').get(num-1)), 60000);