量角器Javascript没有按顺序执行

时间:2017-06-08 09:58:18

标签: javascript promise protractor

我有以下登录功能,可以安装"成功"成功和"失败"对于文件。

function login() {

return new Promise(function (resolve, reject) {
    var username = element(by.name('txtLogin'));
    var password = element(by.id('txtPassword'));
    var signInButton = element(by.id('btnSignIn'));

    for (var i = 0; i < testData.length; i++) {
        if (testData[i].env === appConfig) {
            username.sendKeys(testData[i].user);
            password.sendKeys(testData[i].pass);
            signInButton.click();
            console.log("Successfully Clicked on the Sign In Button!");
            break;
        }
    }
    browser.getTitle().then(function (title) {
        if (title == "Page Title") {
            resolve("Successfull");
        } else {
            reject("Failed");
        }
    });
});
};

以下测试

describe('Login Scenarios', function () {

beforeEach(function () {
    login();
});

it('Valid Credentials, Should login successfully from util class', function () {
    console.log('Successfully logged in!');
});
});

我在这里看到非常奇怪的行为。即使在页面完全加载之前,此行也会执行并控制输出。

console.log("Successfully Clicked on the Sign In Button!");

以下代码永远不会执行。

browser.getTitle().then(function (title) {
        if (title == "Page Title") {
            resolve("Successfull");
        } else {
            reject("Failed");
        }
    });

最后我看到以下错误。

failed: error while waiting for protractor to sync with the page: "cannot re ad property '$$testability' of undefined"

我很确定,我在这里弄乱了些什么。但无法弄清楚这里做了什么错。

1 个答案:

答案 0 :(得分:2)

login返回一个承诺,但你没有向Jasmine / Protractor发出信号,要求它等待它完成。您可以使用done回调:

执行此操作
beforeEach(function (done) {
    login().then(function () {
       done();
    });
});

有关详细信息,请参阅Jasmine documentation(似乎已经无法隐藏在新网站布局中......)。