Тест транспортира генерирует исключение «недопустимое состояние элемента», как только я добавляю утверждение «ожидаю»

0

У меня есть тест транспортира, который проходит - ДОПОЛНИТЕЛЬНО Я добавляю утверждение "ожидать" до конца. Как только я это сделаю, я получаю InvalidElementStateError: недопустимое состояние элемента. Я знаю, что транспортир асинхронен, так что он строит очередь обещаний и по какой-то причине утверждает это утверждение, но я понятия не имею, почему.

describe('compose', function() {

    it('should send a message', function() {
        browser.ignoreSynchronization = true;
        browser.findElement(by.id('compose-link')).click();
        browser.sleep(2000);

        //select recipient     
        var el = element(by.name('input_to'));
        el.click();
        el.sendKeys('a');
        //wait for server to autofill...
        browser.sleep(500);
        el.sendKeys(protractor.Key.ENTER);

        //SNIP...
        //keep clicking buttons, filling out fields etc...
        //END SNIP

        //select category
        el = element(by.id('section-3')).element(by.css('.secret'));
        el.sendKeys('cl') 

        el = element(by.id('send-now'));
        el.click();
        //wait for confirmation message
        browser.sleep(1000);

        expect(element(by.id('confirm-sent')).getText()).toEqual('Task Sent!');
    });
});

BTW, ignoreSynchronization имеет значение true, поскольку в противном случае браузер не сможет синхронизироваться, по-видимому, из-за автозаполнения сервера на некоторых элементах. Я могу повернуть ignoreSync обратно после этих полей, но это не имеет значения - мне все равно нужно делать browser.sleep всюду, чтобы заставить тестовую работу, поэтому я просто оставляю ее равной true.

Теги:
protractor

1 ответ

0

Если элемент появляется в элементе click() элемента, то подождите, пока функция click() вернет обещание, а затем попробуйте проверить, чтобы элемент был видимым с помощью функции wait(). Затем получите текст элемента. Использование функции wait() более подходит для использования, чем sleep(). Здесь фрагмент этой функциональности -

var ele = element(by.id('confirm-sent');
el.click().then(function(){
    browser.wait(protractor.ExpectedConditions.visibilityOf(ele), 10000)
    .then(function(){
        expect(ele.getText()).toEqual('Task Sent!');
    });
});

Надеюсь это поможет.

  • 0
    Спасибо, но, увы, я все еще получаю ту же ошибку: неверное состояние элемента.
  • 0
    Если ваш элемент - «Подтверждение отправлено» появляется после нажатия кнопки, то, вероятно, вам следует подождать, пока действие над этим элементом не будет выполнено. Обновленный ответ с цепочкой click ().

Ещё вопросы

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