猴子贴片Testcafe

时间:2019-09-06 19:29:15

标签: testing automated-tests e2e-testing testcafe monkeypatching

我正尝试通过以下方式修补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())

在网上没有太多搜索这些信息的地方,任何指示信息都会有所帮助。

1 个答案:

答案 0 :(得分:3)

每个测试中的测试控制器实例(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