Как мне объединить Selector с моей функцией Utility? - PullRequest
0 голосов
/ 09 января 2019

При написании тестов с TestCafe я создаю служебные функции , но, похоже, возникает проблема при использовании метода Selector ('') внутри любая функция.

Метод Selector ('') прекрасно работает внутри тестовых файлов, а также при импорте из другого файла (utility_selectors.js). Я думаю, что мне нужно что-то включить в функцию, но я застрял и не могу найти решение.

Моя цель - создать функцию выбора координат щелчка мышью.


Utility_selectors.js

import { Selector } from 'testcafe';

export const viewport = Selector('.viewport').find('canvas');

Utility_functions.js

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

export const selectPoint = (x,y) => {
  return s.viewport + ",{ offsetX :" + x + ", offsetY :" + y + "}"
}

ИЛИ (оба не работают)

export function selectPoint(x,y){
  return s.viewport + ",{ offsetX :" + x + ", offsetY :" + y + "}"
}

Testfile.js (функция полезности в действии)

import { selectPoint } from '../utilities/functions.js';

test('example utility function', async (t) => {
  await t.click(selectPoint(100,200));
});

При выполнении в cmd возникает следующая ошибка:

  SyntaxError: Failed to execute 'querySelectorAll' on 'Document': 'function
  __$$clientFunction$$() {
  const testRun = builder._getTestRun();
  const callsite = (0, _getCallsite.getCallsiteForMethod)(builder.callsiteNames.execution);
  const args = [];

  // OPTIMIZATION: don't leak `arguments` object.
  for (let i = 0; i < arguments.length; i++) args.push(arguments[i]);

  return builder._executeCommand(args, testRun, callsite);
  },{ offsetX :100, offsetY :200}' is not a valid selector.

Короче говоря, я хочу включить метод SelectC ('') TestCafe в служебную функцию.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Редактировать: Если кто-то еще хочет использовать мой код, я сделал его немного чище.

utility_functions_js

import { t } from 'testcafe';

export const clickPoint = (x, y) => {
  return t.doubleClick(s.viewport, { offsetX : x, offsetY: y });
};

Теперь вы можете написать:

await clickPoint(x,y)

вместо

await clickPoint(t,x,y)

Приветствия:)

0 голосов
/ 09 января 2019

Ваш предоставленный код не будет работать, так как вы пытаетесь объединить строку в сгенерированную функцию. Эта строка должна быть объектом, переданным в качестве второго аргумента функции click.

Если вы всегда используете один и тот же селектор, я могу представить, что вы захотите создать утилиту, подобную clickPoint(t, 100,200).

Этого можно добиться с помощью следующей служебной функции.

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

export const clickPoint = (t, x, y) => {
  return t.click(s.viewport, { offsetX : x, offsetY: y });
};

Ваш тестовый файл будет выглядеть так:

import { clickPoint } from '../utilities/functions.js';

test('example utility function', async (t) => {
  await clickPoint(t, 100, 200);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...