如何将"角色"功能封装到页面模型中以仅登录一次



目前我们正在使用testcafe来实现我们的测试用例,并且我们想封装一些页面模型以用于重用。在testcafe中有一个"角色"功能,我们想在我们的"log_in"函数中利用它,这样我们就可以在每个测试套件中只登录一次。页面模型代码如下:

app.js

async _login(url, userName, password) {
const userRole = Role(url, async (t) => {
await t
.typeText(this.user, userName)
.typeText(this.password, password)
.click(this.signIn)
.expect(this.home.exists)
.ok("The file icon should exist after logging on");
}, { preserveUrl: true });
await t.useRole(userRole);
}

async login1stApp() {
await this._login(config.firstUrl, config.user, config.password)
}
async login2ndApp() {
await this._login(config.secondUrl, config.user, config.password, 
)
}
在测试代码中,我们将简单地引用这个页面模型并在beforeEach钩子中执行login函数:

. js

fixture`check ui`.beforeEach(async (t) => {
await app.login1stApp();
});
test(`test a`, async (t) => {
...
});
test(`test b`, async (t) => {
....
});

似乎"Role"没有生效。testcafe将每次都为每个测试用例登录,而不是只登录一次。是否有任何解决方案,使"角色"的工作基于当前的实施?谢谢!

您需要重写页面模型类,以便将t.useRole(role)方法调用放在beforeEach钩子中。

因此,固定页面模型的实现如下所示:
import { Role, t } from 'testcafe';
class App {
constructor() {
this._login1AppRole = Role('https://example.com', async (t) => {
await t.wait(1000);
}, { preserveUrl: true });
}
async login1stApp() {
await t.useRole(this._login1AppRole);
}
}
export default new App();

相关内容

  • 没有找到相关文章

最新更新