Как использовать / распечатать значение внутри универсального атрибута в TestCafe

Я пытаюсь напечатать / использовать значение атрибута Polyline.

<Polyline points="x,y x,y x,y x,y">

Я пытался получить их с помощью этих методов:

Это полезная функция

export const getPointAttribute = async () => {
  const polyline = s.polyline;
  const polylineData = ClientFunction(() => polyline().attributes, {
    dependencies: { polyline }
  });
  return polylineData 
}

Это внутри тестового скрипта

test('', async (t) => {
   console.log(u.getPointAttribute())
}

или же

test('', async (t) => {
   console.log(s.polyline.getAttribute('points'));
}

И я включаю мои внешние селекторы

import * as s from '../utilities/selectors';

Но все, что я получаю, это обещание в виде вывода в лог консоли

Обещание { }

или же

ReExecutablePromise { _then: [], _fn: [Function], _taskPromise: null }

Любая помощь приветствуется!

3 ответа

Решение

Вам следует дождаться звонка внутри console.log:

test('', async (t) => {
   console.log(await s.polyline.getAttribute('points'));
}

или же

test('', async (t) => {
   console.log(await s.polyline.getAttribute('points'));
}

Ваш getPointAttribute функция возвращает polylineData объект, который является экземпляром, если ClientFunction тип (который, в свою очередь, основан на обещаниях). Вот почему, когда вы входите u.getPointAttribute()Вы получаете эти сообщения. Все, что вам нужно сделать, это использовать await Ключевое слово перед вызовом ClientFunction. Пожалуйста, смотрите следующий код:

const polylineData = ClientFunction(() => polyline().attributes, {
    dependencies: { polyline }
});
await polylineData();

Обратитесь к следующей статье, чтобы получить больше информации https://devexpress.github.io/testcafe/documentation/test-api/obtaining-data-from-the-client/

Я также хотел бы отметить, что вам не нужно использовать asyncв вашем getPointAttribute функция.

Мне удалось заставить его работать с утилитой для тех, кто заинтересован.

export function getPoints(object: Selector) : Promise<string> {
  return object.getAttribute('points');
}

Это делает работу с данными проще и чище.

import * as u from '../utilities/functions';
import * as s from '../utilities/selectors';
console.log(await u.getPoints( s.polyline ));

Спасибо за помощь, ребята!

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