我正尝试通过以下方式修补Testcafe:
t.patch.typeText = async (selector, txt, opts) => {
await t.click(selector);
await t.typeText(selector, txt, opts);
}
/* This didn't work */
await t.click(Selector('a[href="/no_thing"]');
await t.onPageLoaded(someCustomFunction())
在网上没有太多搜索这些信息的地方,任何指示信息都会有所帮助。
答案 0 :(得分:3)
每个测试中的测试控制器实例(t
)是不同的,因此您不能以这种方式对其进行修补。
关于您描述的两种情况,请尝试以下方法:
使用需要重用的操作来创建辅助函数。您可以在单独的文件中定义帮助程序,然后在需要这些功能时将此文件导入测试中:
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。
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。