【发布时间】:2021-09-23 12:51:25
【问题描述】:
我正在为一个非常成熟的网站开发测试套件。有很多菜单和深度嵌套的页面。我正在寻找一些关于使用 Protractor JS 测试框架执行重复性系列任务的最佳方式的想法,这些任务在我的许多测试中都需要。
目前我有我的.test.ts 文件(包含测试和测试逻辑)和我的.po.ts 文件(包含页面对象)。以下两者的示例。
// header.test.ts
...
const dh: DealerHeader = new DealerHeader();
const loc: Locators = new Locators();
it('Dealer Header Display', async() => {
const dealerHeaderPrimaryDealerName = await dh.dealerHeaderPrimaryDealerName();
await dealerHeaderPrimaryDealerName.isPresent().then(async function(present) {
if(present) {
await waitToBeDisplayed(dealerHeaderPrimaryDealerName);
await expect(dealerHeaderPrimaryDealerName).toBeDisplayed();
const dealerHeaderDealerRating = await dh.dealerHeaderDealerRating();
await waitToBeDisplayed(dealerHeaderDealerRating);
await expect(dealerHeaderDealerRating).toBeDisplayed();
await click(dealerHeaderPrimaryDealerName);
const dealerHeaderModel = await dh.dealerHeaderModal;
await waitToBeDisplayed(dealerHeaderModel);
await expect(dealerHeaderModel).toBeDisplayed();
} else {
await loc.changeDealer();
};
});
});
...
// dealerHeader.po.ts
...
async dealerHeaderPrimaryDealerName() {
const dealerHeaderTopNavigationElement = await this.dealerHeaderTopNavigationElement();
return dealerHeaderTopNavigationElement.element(by.xpath(
'./pce-dealerheader/div/section/section/div/span[contains(@class, "dealer-name")]'
));
}
get dealerHeaderModal() {
return element(by.xpath(
'//div[@class="dealer-modal"]'
));
}
...
async changeDealer() {
// is dealer set?
// if dealer is set
// click header to expand
// click 'select dealer' button
// goes to new locator page
// scroll down
// type zipcode in, press enter
// get list of dealers, select random dealer
// click dealer 'details' button
// click 'change dealer' button
// if no dealer is set
// click header to expand
// click 'select dealer' button
// goes to new locator page
// scroll down
// type zipcode in, press enter
// get list of dealers, select random dealer
// click dealer 'details' button
// click 'set dealer' button
}
我的问题是关于changeDealer() 函数。 “更换经销商”需要多次点击和一长串步骤来更换。创建这样的函数的最佳设计模式是什么?
【问题讨论】:
标签: javascript automation jestjs protractor