我是量角器的新手,并试图将其用于angularjs应用程序, 配置文件摘要:
exports.config = {
directConnect: true,
capabilities: {
'browserName': 'chrome'
},
framework: 'jasmine',
specs: ['plugins/./test_spec.js'],
allScriptsTimeout: 60000,
getPageTimeout: 30000,
jasmineNodeOpts: {
defaultTimeoutInterval: 1240000
}
};
有效的测试用例(规格文件):
describe('Login', function () {
it('Login Page', function () {
browser.get('http://localhost:9000/apps/admin/');
element(by.model('ctrl.user.name'))
element(by.model('ctrl.user.password'))
expect(true).toBe(true)
});
});
测试用例失败(规格文件):
describe('Login', function () {
it('Login Page', function () {
browser.get('http://localhost:9000/apps/admin/');
element(by.model('ctrl.user.name')).sendKeys("test1");
element(by.model('ctrl.user.password')).sendKeys("test1");
element(by.css('[type="submit"]')).click();
expect(true).toBe(true)
});
});
尝试将sendKeys用于登录页面失败,但没有sendkeys测试用例通过,我得到以下错误:
Failed: script timeout: result was not received in 60 seconds
(Session info: chrome = 72.0.3626.109)
(Driver info: chromedriver = 2.46.628402(536cd7adbad73a3783fdc2cab92ab2ba7ec361e1), platform = Windows NT 10.0.17134 x86_64)
我怀疑找不到元素。 请指导我。
预先感谢
答案 0 :(得分:0)
由于这个thread,我强烈建议您将PyJWT
添加到您的SELENIUM_PROMISE_MANAGER: false,
文件中,如果很快就会告诉您-最好不要使用Control Flow。那么您的配置文件将如何:
protractor.config
之后,您应该更新测试(所有返回 exports.config = {
directConnect: true,
capabilities: {
'browserName': 'chrome'
},
framework: 'jasmine',
specs: ['plugins/./test_spec.js'],
allScriptsTimeout: 60000,
getPageTimeout: 30000,
jasmineNodeOpts: {
defaultTimeoutInterval: 1240000
},
SELENIUM_PROMISE_MANAGER: false,
};
的操作都可以解决它,我更喜欢promise
样式)。另外,您的async ... await
true是没有用的,让它摆脱掉,并添加一些显式的服务员。
expect
此外,最好使用CSS查找定位符。使用此测试将失败的错误更新您的问题。
答案 1 :(得分:0)
量角器是硒的包装器,因此,当您打算使用await / async方法时,只需将SELENIUM_PROMISE_MANAGER设置为false即可将其禁用,以便量角器承诺可以与async / await方法配合使用。
我还建议使用pagemodel设计模式,这将使代码更具可读性。
enter code here
export class loginPageObject{
public emailTextBox: ElementFinder;
public passwordTextBox: ElementFinder;
public signInButton: ElementFinder;
public errorMessage: ElementFinder;
constructor(){ //this.emailTextBox = $("input[type='email']");
//this.emailTextBox = element(by.css("body > app-root > div > app-login > div > div > form > div > input"));
this.emailTextBox = $("input[type='email']");
this.passwordTextBox = $("input[type='password']");
this.signInButton = $("button[type='submit']");
this.errorMessage = $("span");
}
}
上面是一个这样的示例..稍后,您可以按照以下方式使用它