Транспортир возвращает объект, но ожидается - значение element.getText()

Невозможно понять, почему он возвращает объект, а не значение текста, какой-то тестовый код:

describe('columns swap', function () {

    describe('location column ', function () {
        it('should swap right', function () {
            browser.sleep(10000);
            var fColumn = element(by.xpath('(//*[@class="k-link"])[2]')).getText();
            console.log(fColumn); 

Вывод консоли:

>   columns swap
>     location column { ptor_:    { controlFlow: [Function],
>      schedule: [Function],
>      getSession: [Function],
>      getCapabilities: [Function],
>      quit: [Function],
>      actions: [Function],
>      executeScript: [Function],
>      executeAsyncScript: [Function],
>      call: [Function],
>      wait: [Function],
>      sleep: [Function],
>      getWindowHandle: [Function],
>      getAllWindowHandles: [Function],
>      getPageSource: [Function],
>      close: [Function],
>      getCurrentUrl: [Function], ...

Также, если я использую эту часть с expect():

    expect(columnSorting.acpColumn.getText()).to.eventually.equal(fColumn);

Я понимаю:

  1) columns swap location column  should swap right:
     AssertionError: expected 'Location' to equal { Object (ptor_, parentElement
ArrayFinder, ...) }

Так что по какой-то причине я могу получить текст от expect и он правильный - «Местоположение»

Что я делаю неправильно?


person kyxap    schedule 02.03.2015    source источник
comment
вы также можете использовать async/await для управления промисами   -  person Wari    schedule 07.06.2019


Ответы (1)


getText() возвращает обещание. Если вы хотите зарегистрировать фактическое значение, вам необходимо разрешить его:

element(by.xpath('(//*[@class="k-link"])[2]')).getText().then(function (value) {
    console.log(value);

    expect(columnSorting.acpColumn.getText()).to.eventually.equal(value);
});

Обратите внимание, что expect() "исправлено" в protractor/jasminewd для неявного разрешения промисов. Другими словами, вы можете утверждать, что getText() равно желаемому тексту:

expect(element(by.xpath('(//*[@class="k-link"])[2]')).getText()).toEqual('My Text');
person alecxe    schedule 02.03.2015
comment
Да, я знаю, что мы можем использовать ожидаемый текст, но для меня это не сработает, потому что у нас будет перевод на другой язык. спасибо за пример. в основном мне нужно сохранить это «значение» как var и использовать его для моего expect(). но я могу понять, как это сделать - мое плохое знание js. не могли бы вы написать простой пример для этого? - person kyxap; 02.03.2015
comment
@kyxap Я обновил ответ, включая ожидаемый вызов внутри функции then(). Это то, что вы пытаетесь сказать? Спасибо. - person alecxe; 02.03.2015
comment
извините, но не требуется 15 репутации. Кстати, как мы можем сохранить значение или создать функцию с возвращаемым состоянием? - person kyxap; 02.03.2015
comment
@kyxap nono, вы смешиваете функции принятия ответа и голосования. Чтобы принять, просто поставьте галочку. Чтобы ответить на ваш вопрос: вам придется погрузиться в промисы, см. обещания в транспортире"> stackoverflow.com/questions/24289431/ и stackoverflow.com/a/21736757/771848. Если у вас возникнут трудности, рассмотрите возможность задать отдельный вопрос, чтобы больше людей могли помочь. - person alecxe; 02.03.2015