我正在尝试自动化一个测试场景,其中我首先一页一页地遍历页面,然后在每个页面上遍历元素列表,直到找到所需的元素,但是当 if 语句中满足我的条件时,我将设置一个标志停止两个循环,但外循环继续运行直到最后一页,即使我的条件在第二页已经满足,你们能帮我吗
我的方法
clickOnNextBtnUntilDisable() {
cy.get(".MuiPagination-ul li button").last().invoke("text").as("lastPage");
cy.get("@lastPage").then((lastPageText) => {
const index = parseInt(lastPageText, 10); // converting last page text into int.
let flag = false;
for (let i = 1; i < index; i++) {
cy.get(".MuiGrid-justify-xs-space-evenly .MuiGrid-container > p").each(
(el, index) => {
if (el.text() === "Test Attribute Do not touch") {
cy.log("Condition met");
flag = true;
return;
}
}
);
if (!flag) {
cy.contains("Next").click();
} else {
return;
}
}
});
}
我的测试
it("Adding question to existing attribute", function () {
dashBoardPage.clickOnSwitchView();
dashBoardPage.clickOnAttributes();
attributesPage.clickOnNextBtnUntilDisable();
});
给标志起别名
您可以使用别名来测试您的标志条件:
let flag = false;
cy.wrap(flag).as('stop')
for (let i = 1; i < index; i++) {
cy.get('@stop').then(stop =>
if (!stop) {
cy.get(".MuiGrid-justify-xs-space-evenly .MuiGrid-container > p").each(
(el, index) => {
if (el.text() === "Test Attribute Do not touch") {
cy.log("Condition met");
flag = true;
cy.wrap(flag).as('stop')
}
}
)
// also need the alias check here, since above .each() needs to finish
cy.get('@stop').then(stop =>
if (!flag) {
cy.contains("Next").click();
} else {
cy.wrap(flag).as('stop')
}
})
这“协调”静态
for()
循环与循环内动态查询的结果。
如果没有
cy.get('@stop').then(stop =>
行,代码会在命令队列开始运行之前将所有命令排入队列。