函数 returns 在 cypress.io 中未定义
Function returns undefined in cypress.io
以下代码在测试中运行良好。
cy.get("table").find(`tr[data-index=0] > :nth-child(1)`).then($td => {
cy.get("input").type($td.text().trim() + "{enter}");
});
但是这个函数中的相同代码不会
const getResult = () => {
cy.get("table", {timeout: 60000}).find(`tr[data-index=0] > :nth-child(1)`, {timeout: 60000}).then($td => {
return $td.text().trim()
});
}
it("query", () => {
cy.get("input").type(getResult() + "{enter}");
})
关于柏树的 then()
我错过了什么?
目标当然是获取 table 第一个单元格的内容并将其键入 input
字段。
编辑:
按照@jean-smaug 的建议,我尝试了这个 invoke/as
但我收到错误 Cannot read property 'text' of undefined
。事实上,函数在不同的 ES 模块中,上下文也不同。代码:
// different ES module
export const getResult = () => {
cy.get("table").find(`tr[data-index=0] > :nth-child(1)`).invoke("text").as("text")
}
// test
getResult("opencga-file-grid")
cy.get("input").type(this.text + "{enter}");
问题是如何在 Cypress 中访问变量。
文档的这一部分应该会有帮助
https://docs.cypress.io/guides/core-concepts/variables-and-aliases.html#Sharing-Context
我想你可以这样做
cy.get("table", {timeout: 60000}).find(`tr[data-index=0] > :nth-child(1)`, {timeout: 60000}).invoke('text').as('text')
cy.get("input").type(this.text + "{enter}");
如果您删除别名并将 return 值视为 Cypress Chainable,则您的最后一个示例有效。
// different ES module
export const getResult = () => {
return cy.get("table").find(`tr[data-index=0] > :nth-child(1)`).invoke("text");
}
// test
getResult("opencga-file-grid")
.then(text => {
cy.get("input").type(text + "{enter}");
});
等同于此(如果所有代码都在同一个文件中)
cy.get("table").find(`tr[data-index=0] > :nth-child(1)`).invoke("text")
.then(text => {
cy.get("input").type(text + "{enter}");
});
以下代码在测试中运行良好。
cy.get("table").find(`tr[data-index=0] > :nth-child(1)`).then($td => {
cy.get("input").type($td.text().trim() + "{enter}");
});
但是这个函数中的相同代码不会
const getResult = () => {
cy.get("table", {timeout: 60000}).find(`tr[data-index=0] > :nth-child(1)`, {timeout: 60000}).then($td => {
return $td.text().trim()
});
}
it("query", () => {
cy.get("input").type(getResult() + "{enter}");
})
关于柏树的 then()
我错过了什么?
目标当然是获取 table 第一个单元格的内容并将其键入 input
字段。
编辑:
按照@jean-smaug 的建议,我尝试了这个 invoke/as
但我收到错误 Cannot read property 'text' of undefined
。事实上,函数在不同的 ES 模块中,上下文也不同。代码:
// different ES module
export const getResult = () => {
cy.get("table").find(`tr[data-index=0] > :nth-child(1)`).invoke("text").as("text")
}
// test
getResult("opencga-file-grid")
cy.get("input").type(this.text + "{enter}");
问题是如何在 Cypress 中访问变量。
文档的这一部分应该会有帮助
https://docs.cypress.io/guides/core-concepts/variables-and-aliases.html#Sharing-Context
我想你可以这样做
cy.get("table", {timeout: 60000}).find(`tr[data-index=0] > :nth-child(1)`, {timeout: 60000}).invoke('text').as('text')
cy.get("input").type(this.text + "{enter}");
如果您删除别名并将 return 值视为 Cypress Chainable,则您的最后一个示例有效。
// different ES module
export const getResult = () => {
return cy.get("table").find(`tr[data-index=0] > :nth-child(1)`).invoke("text");
}
// test
getResult("opencga-file-grid")
.then(text => {
cy.get("input").type(text + "{enter}");
});
等同于此(如果所有代码都在同一个文件中)
cy.get("table").find(`tr[data-index=0] > :nth-child(1)`).invoke("text")
.then(text => {
cy.get("input").type(text + "{enter}");
});