首页 > 解决方案 > 将元素文本存储在数组中并稍后访问它

问题描述

我正在尝试在 for 循环中获取多个元素的元素文本,并希望将其存储在数组中以便以后使用。下面是我正在使用的代码。我需要访问该数组以供以后使用,以便将此数组与另一个数组进行比较。请让我知道如何在柏树中实现这一点。

  it('My test', () => {
    let arrayOfElementText = [];
    cy.get('#divEl').each(($el) => {
        cy.wrap($el).click();
        cy.get('#input').invoke('val')
            .then(val => {
                arrayOfElementText.push(val);
                console.log(arrayOfElementText);//Able to access
            });
        console.log(arrayOfElementText); **//Not able to access**
    })

    let anotherArray = [];
    cy.get('#divEl1').each(($el) => {
        cy.get('#input1').invoke('val')
            .then(val => {
                anotherArray.push(val);
                console.log(anotherArray);//Able to access
            });
        console.log(anotherArray);**//Not able to access**
    })
    // code to compare two arrays 
    //both arrays are not accessible here
});

标签: cypress

解决方案


您需要使用.then()来访问这些值,因为它们是从异步命令派生的。

let arrayOfElementText = [];

cy.get('#divEl').each(($el) => {
  cy.wrap($el).click();
  cy.get('#input').invoke('val')
    .then(val => {
      arrayOfElementText.push(val);
    })
    .then(() => {
      console.log(arrayOfElementText); // array is available at every step of .each()
    })
  }).then(() => {
    console.log(arrayOfElementText); // full array is available here
    cy.wrap(arrayOfElementText).as('myArray1')  // alias it for later
  })

/* 
  Next array, same as above
*/

cy.get('@myArray1').then(myArray1 => {
  cy.get('@myArray2').then(myArray2 => {
    // compare
  })
})

注意 cy.get('#input')总是会得到相同的输入


推荐阅读