Транспортир Javascript не выполняется в последовательности

1

У меня есть функция ниже для входа в систему, которая удалит "успешный" успех и "Не удалось" для файлов.

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"

Я уверен, что я что-то испортил. Но не могу понять, что неправильно, что я здесь делаю.

Теги:
promise
protractor

1 ответ

2
Лучший ответ

login возвращает обещание, но вы не сигнализируете Jasmine/Protractor, что ему нужно дождаться его завершения. Вы можете сделать это, используя done обратный вызов:

beforeEach(function (done) {
    login().then(function () {
       done();
    });
});

См. Документацию Jasmine (которая, кажется, была необъяснимо скрыта в новом макете веб-сайта...) для получения дополнительной информации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню