Транспортир: element.getText() возвращает объект, а не String

У меня есть элемент, определенный как

this.clientRowName = element(by.id('CLIENT_NAME')); //page object file

Я хочу прочитать текст в этом элементе, который является "ABC", но делает: var client = page.clientRowName.getText();

возвращает объект вместо строки. Есть ли другой способ получить текст для элемента

4 ответа

Решение

getText()возвращает обещание, вам нужноразрешить его:

page.clientRowName.getText().then(function (text) {
    console.log(text);
});

Или, если вы просто хотите утвердить текст, пустьexpect()решить обещание для вас:

expect(page.clientRowName.getText()).toEqual("ABC");

Обещания и страница документации Control Flow должны прояснить ситуацию.

Другим решением может быть использование async/await,

class Page {
  constructor() {
    this.clientRowName = $('#CLIENT_NAME');
  }
}

/****************/

it('should console.log client name', async () => {
  const client = await Page.clientRowName.getText();
  console.log(client);
});

Я обычно использовал element.getAttribute('value')

Если вы в 2021 году, вы захотите прочитать этот ответ

согласно документации транспортира, .getText() возвращает обещание.

Лучший способ выполнить обещание с 2021 года - использовать ключевые слова async / await. Это заставит транспортир "заморозиться" и ждать, пока обещание не будет разрешено, прежде чем запускать следующую команду.

      it('test case 1', async () => {
  let text = await page.clientRowName.getText();
  console.log(text);
})

.then() также можно использовать, но используя async/await сделает ваш код более читаемым и легким для отладки.

Другие вопросы по тегам