猴子补丁Testcafe

Monkey patch Testcafe

我正在尝试通过以下方式修改 Testcafe 补丁:

  1. 添加在所有测试中可用的自定义方法
t.patch.typeText = async (selector, txt, opts) => {
  await t.click(selector);
  await t.typeText(selector, txt, opts);
}
/* This didn't work */
  1. 运行 每次加载页面时的自定义代码。
await t.click(Selector('a[href="/no_thing"]');
await t.onPageLoaded(someCustomFunction())

在网上谷歌搜索这些内容时找不到太多内容,任何指示都会有所帮助。

每个测试中的测试控制器实例 (t) 都不同,因此您不能以这种方式对其进行修补。

针对您描述的两种情况,尝试以下方法:

场景 1

使用需要重复使用的操作创建辅助函数。您可以在单独的文件中定义帮助程序,然后在需要这些功能时将此文件导入测试:

helpers.js

import { t } from 'testcafe';

export async function type(selector, txt, opts) => {
    await t
        .click(selector)
        .typeText(selector, txt, opts);
}

test.js

import { Selector } from 'testcafe';
import { type } from './helpers.js';
   
fixture `My Fixture`
    .page `https://devexpress.github.io/testcafe/example/`;
 
test('My Test', async t => {
    await type(Selector('#element'), 'text', { replace: true });
});

另请注意,t.typeText 操作会在输入文本之前单击目标输入。您不需要单独的点击操作来聚焦输入。

有关辅助函数的详细信息,请参阅 Create Helpers

我们计划支持自定义操作,以便在未来的版本中更好地解决您的用例。有关详细信息,请参阅 this GitHub issue

场景 2

TestCafe 可以将自定义脚本注入测试 运行、测试或夹具期间访问的每个页面。这些脚本被注入到 <head> 标签中并以通常的方式执行。

创建一个包含您需要注入的脚本的文件:

script.js

window.addEventListener('DOMContentLoaded', function () {
    // this code runs on each page when it is loaded
});

然后 inject these scripts 使用以下方法之一:

命令行界面

testcafe chrome test.js --client-scripts script.js

编程界面

runner.clientScripts('script.js');

配置文件

{
    "clientScripts": "script.js"
}

有关脚本注入的详细信息,请参阅Inject Scripts into Tested Pages