如何使用 .wrap 和 cypress 命令功能 return 字符串值
How to return string value with .wrap and cypress command feature
我有一个代码:
Cypress.Commands.add('getLabelText', (parentSelector: string, label: string) => {
var result: string= '';
cy.get(parentSelector).within(() => {
cy.get(`[aria-label="${label}"]`).then(el => {
result.replace(el.text(), '')
})
return cy.wrap(result)
})
})
我尝试了很多不同的方法来为字符串赋新值,这个例子只是其中之一。
我想要 return 元素文本并像这样使用它:
verifyText: () => {
cy.getLabelText(locator, expectedString).then(value => {
expect(value).to.eq(expectedString)
})
},
赛普拉斯将 return locatro insted 文本:
expected '<div.v-data-table.summary-table.v-data-table--dense.v-data-table--fixed-height.theme--light>' to equal 'expectedString'
有什么建议吗?
为了 return 值,您将必须 return 整个链。
Cypress.Commands.add('getLabelText', (parentSelector: string, label: string) => {
return cy.get(parentSelector).within(() => {
return cy.get(`[aria-label="${label}"]`).then(el => {
return el;
})
})
})
...
verifyText: () => {
cy.getLabelText(locator, expectedString).then(el => {
expect(el.text()).to.eq(expectedString)
})
}
此外,如果您的 expectedString
对于函数和使用函数结果的断言始终相同,您可以只在函数中断言。
Cypress.Commands.add('getLabelText', (parentSelector: string, label: string) => {
cy.get(parentSelector).within(() => {
cy.get(`[aria-label="${label}"]`).then(el => {
expect(el.text()).to.eq(label);
})
})
})
...
verifyText: () => {
cy.getLabelText(locator, expectedString);
}
使 cy.wrap()
成为链中的最后一个动作。不需要 return
,因为您正在使用 .then(value =>
访问链上的最后一个主题
Cypress.Commands.add('getLabelText', (parentSelector, label) => {
let result = '';
cy.get(parentSelector).within(() => {
cy.get(`[aria-label="${label}"]`).then(el => {
result = el.text()
})
}).then(() => {
cy.wrap(result)
})
})
如果aria-label匹配文本内容,
Cypress.Commands.add('getLabelText', (parentSelector: string, label: string) => {
const selector = `${parentSelector} [aria-label="${label}"]`;
cy.get(selector)
.invoke('text') // this text is returned
.should('eq', label)
})
})
cy.getLabelText(locator, expectedString)
.then(value => {
expect(value).to.eq(expectedString)
})
我有一个代码:
Cypress.Commands.add('getLabelText', (parentSelector: string, label: string) => {
var result: string= '';
cy.get(parentSelector).within(() => {
cy.get(`[aria-label="${label}"]`).then(el => {
result.replace(el.text(), '')
})
return cy.wrap(result)
})
})
我尝试了很多不同的方法来为字符串赋新值,这个例子只是其中之一。
我想要 return 元素文本并像这样使用它:
verifyText: () => {
cy.getLabelText(locator, expectedString).then(value => {
expect(value).to.eq(expectedString)
})
},
赛普拉斯将 return locatro insted 文本:
expected '<div.v-data-table.summary-table.v-data-table--dense.v-data-table--fixed-height.theme--light>' to equal 'expectedString'
有什么建议吗?
为了 return 值,您将必须 return 整个链。
Cypress.Commands.add('getLabelText', (parentSelector: string, label: string) => {
return cy.get(parentSelector).within(() => {
return cy.get(`[aria-label="${label}"]`).then(el => {
return el;
})
})
})
...
verifyText: () => {
cy.getLabelText(locator, expectedString).then(el => {
expect(el.text()).to.eq(expectedString)
})
}
此外,如果您的 expectedString
对于函数和使用函数结果的断言始终相同,您可以只在函数中断言。
Cypress.Commands.add('getLabelText', (parentSelector: string, label: string) => {
cy.get(parentSelector).within(() => {
cy.get(`[aria-label="${label}"]`).then(el => {
expect(el.text()).to.eq(label);
})
})
})
...
verifyText: () => {
cy.getLabelText(locator, expectedString);
}
使 cy.wrap()
成为链中的最后一个动作。不需要 return
,因为您正在使用 .then(value =>
Cypress.Commands.add('getLabelText', (parentSelector, label) => {
let result = '';
cy.get(parentSelector).within(() => {
cy.get(`[aria-label="${label}"]`).then(el => {
result = el.text()
})
}).then(() => {
cy.wrap(result)
})
})
如果aria-label匹配文本内容,
Cypress.Commands.add('getLabelText', (parentSelector: string, label: string) => {
const selector = `${parentSelector} [aria-label="${label}"]`;
cy.get(selector)
.invoke('text') // this text is returned
.should('eq', label)
})
})
cy.getLabelText(locator, expectedString)
.then(value => {
expect(value).to.eq(expectedString)
})