我在使用量角器以及 firefox 时遇到问题。
在我的测试中,我首先将浏览器定向到登录页面,输入用户名和密码后,我会执行另一个 browser.get
操作,将我引导到另一个页面。
登录页面和第二页都是非角度页面。 我面临的问题是firefox不会等待初始页面加载并立即尝试执行重定向操作。
我试过firefox版本:27.0.1,28.0,42.0,45.0.1和46.0.1(所有32位版本)所有版本显示相同的行为。 webdriver-manager版本为10.0.4,selenium webdriver版本为2.53,os win8.1为64位,量角器版本为3.1.1。
当在chrome浏览器上运行相同的测试时,测试运行应该是,它等待登录完成,然后它转到执行browser.get操作的下一个块。
我的配置文件:
var HtmlScreenshotReporter = require('protractor-jasmine2-screenshot-reporter');
var path = require('path');
exports.config = {
framework: 'jasmine2',
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['multiTestRun.js'],
getPageTimeout: 60000,
rootElement: '[ng-app]',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 10000000,
isVerbose: true,
includeStackTrace: true
},
params: {
test: 'Regression',
resources: 3,
locations: 4,
skills: 2,
services: 0,
useNameSpace: 0
},
capabilities: {
'browserName': 'firefox'
},
onPrepare: function(){
var dest = path.normalize('./Results');
browser.manage().timeouts().setScriptTimeout(120000);
jasmine.getEnv().addReporter(
new HtmlScreenshotReporter({
dest: dest,
filename: 'my-report.html',
showQuickLinks: true,
reportOnlyFailedSpecs: false,
captureOnlyFailedSpecs: true,
restartBrowserBetweenTests: true
})
);
global.isAngularSite = function(flag){
browser.ignoreSynchronization = !flag;
};
browser.driver.manage().window().maximize();
}
};
我的代码文件:
describe('test', function () {
beforeEach(function(){
isAngularSite(false);
}, 60000);
it('it1', function () {
browser.get('https://example.com/');
element(By.id('username')).clear();
element(By.id('username')).sendKeys('sanu@field.com');
element(By.id('password')).clear();
element(By.id('password')).sendKeys('1234.org');
element(By.id('Login')).click();
});
it('it2', function () {
browser.get('https://example.com/SecondPage');
browser.get('https://example.com/SecondPage');
browser.executeScript('return RemoteActions;')
.then(function(remoteAction) {
console.log('remoteAction.doAction');
console.log(remoteAction.doAction);
browser.executeAsyncScript(function(remoteAction) {
var callback = arguments[arguments.length - 1];
Visualforce.remoting.Manager.invokeAction(remoteAction.doAction, function (res, ev) {
callback(res);
}, { buffer: false, escape: false, timeout: 10000 });
},remoteAction).then(function(res) {
console.log(res);
});
});
});
任何建议?
答案 0 :(得分:1)
由于这些不是角度页面,并且您正在关闭同步,因此在执行下一个操作之前,您必须告诉webdriver如何在单击登录按钮后等待某些事情发生。
在此示例中,您可以等待登录按钮不再存在,以便您知道它已准备好导航到下一页。
element(By.id('Login')).click();
browser.wait(function() {
element(By.id('Login')).isDisplayed().then(function(loginButtonIsDisplayed) {
// break out of the loop by returning 'true' when the login button is not displayed
return !loginButtonIsDisplayed;
), browser.getPageTimeout, 'after clicking the login button, the next page did not load within ' + browser.getPageTimeout + 's'};
browser.get('https://example.com/SecondPage');
browser.getPageTimeout
是一个量角器超时,默认设置为10秒