testcafe 常用的几个功能实现
- 录入数据
- 获取当前页面地址
- 切换 antd 的 select 组件
- 切换 antd 的日历
- 下载
- 跳转到指定页面
录入数据
await t.typeText(dom, "2", { replace: true });
获取当前页面地址
const location_param = ClientFunction(() => window.location);
切换 antd 的 select 组件
this.changeOption = async function (type) {
let id = `#${type}`;
console.log(id);
let option = Selector(`.ant-select-dropdown-menu li[id=\"${type}\"]`);
await t.click(this.option).click(option);
};
for (const option of Selects) {
test(`${select}`, async (t) => {
await xxPage.changeOption(select);
if (xxPage.table.find("tr").length > 0) {
for (let i = 0; i < 10; i++) {
let tdText = await xxPage.table.find("tr").nth(i).find("td").nth(5)
.textContent;
await t.expect(tdText).eql(select);
}
}
});
}
切换 antd 的日历
test("calender", async (t) => {
const startDate = "2019/10/01";
const endDate = "2019/11/30";
await xxPage.changeCalender(
moment(startDate).format(dateFormat),
moment(endDate).format(dateFormat)
);
if (xxPage.table.find("tr").length > 0) {
let startText = await xxPage.table.find("tr").nth(0).find("td").nth(10)
.textContent;
let endText = await xxPage.table.find("tr").nth(0).find("td").nth(11)
.textContent;
await t.expect(moment(startText)).gte(moment(startDate));
await t.expect(moment(endText)).gte(moment(endDate));
}
}).before(async (t) => {
await xxPage.changeOption("option1");
});
下载
import fs from "fs";
const path = require("path");
async function enableDownloadForHeadlessChrome(t) {
const browserConnection = t.testRun.browserConnection;
const client =
browserConnection.provider.plugin.openedBrowsers[browserConnection.id]
.client;
const { Page } = client;
await Promise.all([Page.enable()]);
await Page.setDownloadBehavior({
behavior: "allow",
downloadPath: path.resolve(__dirname, "../../downloaded"),
});
}
const getDownloadCount = () => {
let components = [];
const files = fs.readdirSync(`${BASE_FILE_PATH}`);
files.forEach(function (item, index) {
let stat = fs.lstatSync(`${BASE_FILE_PATH}${item}`);
if (stat.isFile() === true && item != ".DS_Store") {
components.push(item);
}
});
return components;
};
test("download", async (t) => {
const downloadedBefore = getDownloadCount().length;
await enableDownloadForHeadlessChrome(t);
await t.click(xxPage.btnDownload).wait(10000);
const downloadedAfter = getDownloadCount().length;
await t.expect(downloadedAfter).eql(downloadedBefore + 1);
});
跳转到指定页面
const hrefSyn = async (t, currentPage, dom, targetPage) => {
await t.navigateTo(currentPage).click(dom);
const _location = await location_param();
console.log(
xxPage.getPathName(_location.hash),
xxPage.getPathName(targetPage)
);
await t
.expect(xxPage.getPathName(_location.hash))
.eql(xxPage.getPathName(targetPage));
};
test("go href", async (t) => {
await hrefSyn(t, url1, hrefDom, url2);
});