我正在设置一个pin
变量,在cy.get()
中对其进行更新,然后尝试在cy.get()
之后使用它-它不允许我这样做。
我在这里也读到了这是不可能的:https://docs.cypress.io/guides/core-concepts/variables-and-aliases.html#Return-Values。
我真的需要使用此变量才能登录:这是一个生成的PIN,登录时需要使用它。
var pin = ""
cy.get('.pin-field').invoke('text').then((text1) => {
pin = text1; //assign text1 value to global pin variable, does not work
cy.log(text1) // this works and logs the value of text1
})
cy.log(pin) //this just logs an empty
答案 0 :(得分:3)
问题在于同步:函数invoke
返回一个Promise,该Promise以异步方式执行。在cy.log(pin)
被调用之后以及承诺被兑现之前,将立即执行代码invoke
。
尝试一下:
cy.get('.pin-field').invoke('text').then(pin => {
cy.log(pin);
})
或者您可以使用async/await
模拟同步行为:
async function login(cy) {
const pin = await cy.get('.pin-field').invoke('text'); // call it synchron
cy.log(pin); // this code executes when 'invoke` returned
}
别忘了,必须在await
函数中关闭带有async
的代码。
答案 1 :(得分:0)
似乎您在为示波器而苦苦挣扎。对我有用的是:
cy.get('.original_object')
.then($value => {
const retreivedValue = $value.text()
cy.get('.test_object')
.should('contain', retreivedValue)