量角器:无法在登录页面中找到元素

时间:2019-02-15 11:00:42

标签: protractor

我是量角器的新手,并试图将其用于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)

我怀疑找不到元素。 请指导我。

预先感谢

2 个答案:

答案 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");
}

}

上面是一个这样的示例..稍后,您可以按照以下方式使用它