在页面模型中将参数传递给 TestCafe Selector
Passing arguments to TestCafe Selector in page model
我想将字符串传递到页面模型中的 object 以供 .withText
选择使用。我可以使用该页面上的一个函数来做到这一点并且它可以工作,但我必须以不同于页面上定义的 objects 的方式来调用它。
我试过用 FilterFn
玩 .filter
(和 .find
),但没有成功。也许这正是我所需要的,但需要帮助,或者我只是想多了。
示例页面模型摘录
export class AreaPage {
public pageTitle = Selector("#container h1").withText("My Area Title");
public async pageSubtitle(areaName: string) {
return await Selector("#container h2").withText(areaName);
}
}
示例测试摘录
test("test some code", async (t) => {
await t
.click(areaPage.pageTitle)
.click(await areaPage.PageSubtitle("my subtitle"));
}
当然,我可能不想 "click" 这些标题,但它展示了必须如何调用这些页面组件的差异。我也知道我可以捕获 objects 并在测试中进行验证,但这会破坏我正在尝试做的部分工作。
如上所述,它有效,但我希望我们的 QA 人员能够以相同的方式使用它们(即没有 "await" 嵌入在测试的最后一行)。如果我删除等待,我会收到错误消息:
Argument of type 'Promise<Selector>' is not assignable to parameter of type 'string | Selector | NodeSnapshot | SelectorPromise | ((...args: any[]) => Node | Node[] | NodeList | HTMLCollection)'.
Type 'Promise<Selector>' is missing the following properties from type 'SelectorPromise': childElementCount, childNodeCount, hasChildElements, hasChildNodes, and 51 more.ts(2345)
(...这让我的大脑抽筋)
我如何编写页面 object pageSubtitle 以接受参数但在其他方面像 pageTitle object 一样运行?
您正在等待选择器承诺两次 - 这会导致错误。
尝试按如下方式修改您的测试和页面模型:
页面模型:
export class AreaPage {
public pageTitle = Selector("#container h1").withText("My Area Title");
public pageSubtitle(areaName: string) {
return Selector("#container h2").withText(areaName);
}
}
测试:
test("test some code", async (t) => {
await t
.click(areaPage.pageTitle)
.click(pageModel.pageSubtitle("my subtitle"));
}
我想将字符串传递到页面模型中的 object 以供 .withText
选择使用。我可以使用该页面上的一个函数来做到这一点并且它可以工作,但我必须以不同于页面上定义的 objects 的方式来调用它。
我试过用 FilterFn
玩 .filter
(和 .find
),但没有成功。也许这正是我所需要的,但需要帮助,或者我只是想多了。
示例页面模型摘录
export class AreaPage {
public pageTitle = Selector("#container h1").withText("My Area Title");
public async pageSubtitle(areaName: string) {
return await Selector("#container h2").withText(areaName);
}
}
示例测试摘录
test("test some code", async (t) => {
await t
.click(areaPage.pageTitle)
.click(await areaPage.PageSubtitle("my subtitle"));
}
当然,我可能不想 "click" 这些标题,但它展示了必须如何调用这些页面组件的差异。我也知道我可以捕获 objects 并在测试中进行验证,但这会破坏我正在尝试做的部分工作。
如上所述,它有效,但我希望我们的 QA 人员能够以相同的方式使用它们(即没有 "await" 嵌入在测试的最后一行)。如果我删除等待,我会收到错误消息:
Argument of type 'Promise<Selector>' is not assignable to parameter of type 'string | Selector | NodeSnapshot | SelectorPromise | ((...args: any[]) => Node | Node[] | NodeList | HTMLCollection)'.
Type 'Promise<Selector>' is missing the following properties from type 'SelectorPromise': childElementCount, childNodeCount, hasChildElements, hasChildNodes, and 51 more.ts(2345)
(...这让我的大脑抽筋)
我如何编写页面 object pageSubtitle 以接受参数但在其他方面像 pageTitle object 一样运行?
您正在等待选择器承诺两次 - 这会导致错误。 尝试按如下方式修改您的测试和页面模型:
页面模型:
export class AreaPage {
public pageTitle = Selector("#container h1").withText("My Area Title");
public pageSubtitle(areaName: string) {
return Selector("#container h2").withText(areaName);
}
}
测试:
test("test some code", async (t) => {
await t
.click(areaPage.pageTitle)
.click(pageModel.pageSubtitle("my subtitle"));
}