testcafe的github上有一个多用户场景的例子。
https://github.com/DevExpress/testcafe-example-multiuser-scenario
我正在尝试扩展它并确保它与3个用户一起工作。
https://github.com/touka-tt/testcafe-example-multiuser-scenario
- third-user-test.js
const { Selector } = require('testcafe');
const { getScenario } = require('..');
const scenario = getScenario('An example of synchronizing multiple tests');
const stage = scenario.initUser('Third user');
fixture`Third fixture`
.page('http://localhost:3000');
const input = Selector('input');
const h1 = Selector('h1');
test('test', async t => {
await stage('Check page load');
await t.expect(input.exists).ok();
await stage('Type a color and send it');
await t
.typeText(input, 'red')
.pressKey('enter');
await stage('Check result');
await t.expect(h1.innerText).eql('Not ok!');
await stage('End');
});
- scenario-gist.js
const { Scenario } = require('..');
module.exports = async () => {
const scenario = new Scenario('An example of synchronizing multiple tests');
const [user1, user2, user3] = await Promise.all([
scenario.createUser('First user', 'test/first-user-test.js', 'chrome'),
scenario.createUser('Second user', 'test/second-user-test.js', 'chrome --incognito'),
scenario.createUser('Third user', 'test/third-user-test.js', 'chrome --incognito')
]);
await Promise.all([
user1.runStage('Check page load'),
user2.runStage('Check page load'),
user3.runStage('Check page load')
]);
await user1.runStage('Type a color and send it');
await user1.runStage('Check result');
await user2.runStage('Type a color and send it');
await user2.runStage('Check result');
await user3.runStage('Type a color and send it');
await user3.runStage('Check result');
user1.runStage('End');
user2.runStage('End');
user3.runStage('End');
};
乍一看,这个测试似乎工作得很好。但是,第一次运行测试时,它很成功,但在第二次及以后运行时,它在第一个createUser时停滞不前。
请告诉我如何使用testcafe开发一个可以被多个用户重复的端到端测试。
我找到故障原因了。事实是,从v1.15.3开始,TestCafe重置了测试文件中请求的模块的缓存。因此,getScenario
有时会尝试在已被覆盖的对象中查找脚本。
我已经修复了这个错误:https://github.com/DevExpress/testcafe-example-multiuser-scenario.
PR: https://github.com/DevExpress/testcafe-example-multiuser-scenario/pull/3.