将文本值分配给柏树中的变量以比较变化
Assigning text value to variable in cypress to compare changes
我正在尝试比较在应用程序中执行某些操作后值是否正确更改。
首先,我尝试使用柏树别名分配值,但它根本找不到该值。我尝试使用 let 和 const,但存在同样的问题。
所以这是给出错误的代码:
cy.get('[data-cy=AmountAll]', { timeout: 15000 }).invoke('text').then((text) => {
text.replace(/\D/g,'').as("myAlias")
})
我想重用这个 txt 变量,以便以后比较:
cy.get('[data-cy=AmountAll]', { timeout: 15000 }).invoke('text').then((text) => {
expect(@myAlias).to.be.gte(text.replace(/\D/g,''));
})
所以它基本上是检查在执行一些程序后值是否发生变化并且是否比以前小。但是我找不到将这个值保存在变量中的正确方法
这可能是因为您认为 Cypress 代码是同步运行的。但事实并非如此。我建议从 this senction of the documentation and read all other sections this one links, e.g. this one.
开始
在我链接的第二部分中,有一些代码基本上可以回答您的问题,尽管它处理的是不同的上下文。
所以,您可能想做这样的事情:
cy.get('[data-cy=AmountAll]', { timeout: 15000 }).invoke('text').then((text1) => {
const text1 = text1.replace(/\D/g,'');
// some actions you need to perform
cy.get('[data-cy=AmountAll]', { timeout: 15000 }).invoke('text').then((text2) => {
const text2 = text2.replace(/\D/g,'');
expect(text1).to.eq(text2);
});
});
你得到的文本是字符串,如果你想比较两者,你必须转换成数字(使用 parseInt)。您可以使用 this
访问 myAlias(因为,在幕后,别名基本对象和原语利用了 Mocha 的共享上下文对象:也就是说,别名可用作 this。*)
cy.get('[data-cy=AmountAll]', {
timeout: 15000
}).invoke('text').then((text) => {
const amountAllBefore = parseInt(text.replace(/\D/g, '')) //this will only work if text.replace(/\D/g, '') returns a number but is string
cy.wrap(amountAllBefore).as('myAlias')
})
cy.get('[data-cy=AmountAll]', {
timeout: 15000
}).invoke('text').then((text) => {
const amountAllAfter = = parseInt(text.replace(/\D/g, '')) //this will only work if text.replace(/\D/g, '') returns a number but is string
expect(this.myAlias).to.be.greaterThan(amountAllAfter)
})
您无法在其中检索别名 expect()
那样。
尝试关闭(类似于@pavelsaman 的建议),但使用 cy.get('@myAlias') 因为您希望将两个块分开。
cy.get('@myAlias').then(text1 => {
cy.get('[data-cy=AmountAll]', { timeout: 15000 }).invoke('text').then((text2) => {
expect(text1).to.be.gte(text2.replace(/\D/g,''));
})
})
我正在尝试比较在应用程序中执行某些操作后值是否正确更改。 首先,我尝试使用柏树别名分配值,但它根本找不到该值。我尝试使用 let 和 const,但存在同样的问题。
所以这是给出错误的代码:
cy.get('[data-cy=AmountAll]', { timeout: 15000 }).invoke('text').then((text) => {
text.replace(/\D/g,'').as("myAlias")
})
我想重用这个 txt 变量,以便以后比较:
cy.get('[data-cy=AmountAll]', { timeout: 15000 }).invoke('text').then((text) => {
expect(@myAlias).to.be.gte(text.replace(/\D/g,''));
})
所以它基本上是检查在执行一些程序后值是否发生变化并且是否比以前小。但是我找不到将这个值保存在变量中的正确方法
这可能是因为您认为 Cypress 代码是同步运行的。但事实并非如此。我建议从 this senction of the documentation and read all other sections this one links, e.g. this one.
开始在我链接的第二部分中,有一些代码基本上可以回答您的问题,尽管它处理的是不同的上下文。
所以,您可能想做这样的事情:
cy.get('[data-cy=AmountAll]', { timeout: 15000 }).invoke('text').then((text1) => {
const text1 = text1.replace(/\D/g,'');
// some actions you need to perform
cy.get('[data-cy=AmountAll]', { timeout: 15000 }).invoke('text').then((text2) => {
const text2 = text2.replace(/\D/g,'');
expect(text1).to.eq(text2);
});
});
你得到的文本是字符串,如果你想比较两者,你必须转换成数字(使用 parseInt)。您可以使用 this
访问 myAlias(因为,在幕后,别名基本对象和原语利用了 Mocha 的共享上下文对象:也就是说,别名可用作 this。*)
cy.get('[data-cy=AmountAll]', {
timeout: 15000
}).invoke('text').then((text) => {
const amountAllBefore = parseInt(text.replace(/\D/g, '')) //this will only work if text.replace(/\D/g, '') returns a number but is string
cy.wrap(amountAllBefore).as('myAlias')
})
cy.get('[data-cy=AmountAll]', {
timeout: 15000
}).invoke('text').then((text) => {
const amountAllAfter = = parseInt(text.replace(/\D/g, '')) //this will only work if text.replace(/\D/g, '') returns a number but is string
expect(this.myAlias).to.be.greaterThan(amountAllAfter)
})
您无法在其中检索别名 expect()
那样。
尝试关闭(类似于@pavelsaman 的建议),但使用 cy.get('@myAlias') 因为您希望将两个块分开。
cy.get('@myAlias').then(text1 => {
cy.get('[data-cy=AmountAll]', { timeout: 15000 }).invoke('text').then((text2) => {
expect(text1).to.be.gte(text2.replace(/\D/g,''));
})
})