我想知道是否可以將定位器作為引數傳遞以使我的函式可重用。我試圖自己做,但我得到“未定義”而不是作業測驗。賽普拉斯錯誤:cy.click() 失敗,因為它需要 DOM 元素。收到的題目是:
不明確的
我的代碼:
Cypress.Commands.add(
"commandName",
(locator, chartValue1) => {
const chartValues = [150, 250, 350, 450, 550, 750, 900];
for (const value of chartValues) {
locator.click(value, chartValue1).then(() => {
mainElementsPage
.mainSideBarHeader()
.should("not.include.text", "(pon.)")
.should("not.include.text", "(wt.)")
.should("not.include.text", "(?r.)");
});
}
}
);
我在測驗中使用這個命令:
it("should do something", () => {
cy.commandName(mainElementsPage.chartRect(), 200);
});
mainElements頁面內容:
class mainElementsPage {
chartRect() {
return cy.get("#chart-grid-rect");
}
}
export default mainElementsPage;
uj5u.com熱心網友回復:
在 Cypress 中,不可能同時擁有 2 個活動的命令鏈。因此,您不能將命令鏈傳遞給另一個命令(包括您所做的自定義命令)。因此,我看到了解決問題的 4 種不同方法:
- 使用普通函式而不是自定義命令。因此,您將能夠從您的 POM 物件傳遞一個鏈。
- 從您的 POM 物件回傳字串定位器而不是鏈
- 使用子命令并鏈接您的邏輯(請參閱@Fody 的答案)。
- 傳遞指向您的 POM 物件函式的函式參考并在自定義命令中呼叫此函式(請參閱@wojnarto 的答案)。
uj5u.com熱心網友回復:
為了確保您可以使用mainElementsPage
,您必須首先將此檔案匯入到您的測驗中,如下所示:
import mainElementsPage from '../<some path>/mainElementsPage.js'
然后你必須為此創建一個物件,比如
const mainElements = new mainElementsPage();
然后您可以將其用作:
mainElements.chartRect()
uj5u.com熱心網友回復:
看起來你想制作一個子命令。
subject
您的自定義命令之前的任何內容都作為(等效于locator
)傳入
Cypress.Commands.add("commandName", {prevSubject: true},
(subject, chartValue1) => {
const chartValues = [150, 250, 350, 450, 550, 750, 900];
for (const value of chartValues) {
subject.click(value, chartValue1).then(() => {
mainElementsPage.mainSideBarHeader()
.should("not.include.text", "(pon.)")
.should("not.include.text", "(wt.)")
.should("not.include.text", "(?r.)");
});
}
}
)
cy.get("#chart-grid-rect").commandName(200);
// or
mainElementsPage.chartRect().commandName(200);
class MainElementsPage {
chartRect() {
return cy.get("#chart-grid-rect");
}
}
export default new MainElementsPage; // note - new keyword here
uj5u.com熱心網友回復:
我是這樣走的:
Cypress.Commands.add(
"commandName",
(locator, chartValue1) => {
const chartValues = [150, 250, 350, 450, 550, 750, 900];
for (const value of chartValues) {
locator()
.click(value, chartValue1).then(() => {
mainElementsPage
.mainSideBarHeader()
.should("not.include.text", "(pon.)")
.should("not.include.text", "(wt.)")
.should("not.include.text", "(?r.)");
});
}
}
);
在測驗中它看起來:
it("should do something", () => {
cy.commandName(mainElementsPage.chartRect, 200);
});
所以事情是關于在 Cypress.Commands.add() 中添加()到定位器并在測驗中使用定位器作為字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/480945.html
標籤:javascript 自动化 柏 赛普拉斯自定义命令
下一篇:連接兩個切換按鈕以相互切換