如何将选择器与实用程序功能结合使用?

时间:2019-01-09 09:04:17

标签: javascript reactjs testcafe

使用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.

长话短说,我想在实用程序函数中包含TestCafe的Selector('')方法。

谢谢!

2 个答案:

答案 0 :(得分:6)

您提供的代码将无法正常工作,因为您试图将字符串连接到生成的函数。该字符串应该是一个对象,该对象作为第二个参数传递给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);
});

答案 1 :(得分:0)

编辑:如果其他任何人想要使用我的代码,我都会使其变得更干净。

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)

干杯:)