首页 > 解决方案 > 猴子补丁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())

没有找到很多在线谷歌搜索这些,任何指针都会有所帮助。

标签: testingautomated-testse2e-testingtestcafemonkeypatching

解决方案


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

关于您描述的两种情况,请尝试以下方法:

方案 1

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

helpers.js  

import { t } from 'testcafe';

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

测试.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操作在键入文本之前单击目标输入。您不需要单独的单击操作来聚焦输入。

有关辅助函数的更多信息,请参阅创建辅助函数。

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

方案 2

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

使用您需要注入的脚本创建一个文件:

脚本.js  

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

然后使用以下方法之一注入这些脚本:

命令行界面  

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

编程接口  

runner.clientScripts('script.js');

配置文件  

{
    "clientScripts": "script.js"
}

有关脚本注入的更多信息,请参阅将脚本注入测试页面


推荐阅读