无法在cypress命令cy.get()中设置变量的值以在命令外部使用

时间:2019-03-08 12:11:22

标签: javascript cypress

我正在设置一个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

2 个答案:

答案 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)