在 each() Cypress 中使用 invoke() 访问 href 属性

Accessing href attribute using invoke() in each() Cypress

我是 Cypress 的新手,我正在尝试使用 invoke() 从组中访问每个 div 标记的 href 属性,但它给出了错误。有人可以建议你怎么做吗?

cy.get('.bms-scoreboard__game-tile--mls').each(($el,index,$list) => {
            $el.get('a')
                .invoke('attr','href')
                .then(href => {
                    cy.request(href)
                        .its('status')
                        .should('eq',200)
                })
        })

$el 是一个 JQuery 元素,而不是 Cypress 链中的元素。您需要使用 cy.wrap() 才能在 Cypress 链中使用它。

cy.get('.bms-scoreboard__game-tile--mls').each(($el,index,$list) => {
            cy.wrap($el)
                .get('a')
                .invoke('attr','href')
                .then(href => {
                    cy.request(href)
                        .its('status')
                        .should('eq',200)
                })
        })

我认为 .get() 不合适 - 它只适用于 <body> 而不是每个 '.bms-scoreboard__game-tile--mls'.

改用.find()

有 jQuery 个运算符

cy.get('.bms-scoreboard__game-tile--mls')
  .each(($el,index,$list) => {
    const href = $el.find('a').attr('href')
    cy.request(href)
      .its('status')
      .should('eq', 200)
  })
})

或使用 Cypress 运算符

cy.get('.bms-scoreboard__game-tile--mls')
  .each(($el,index,$list) => {
    cy.wrap($el).find('a')
      .invoke('attr','href')
      .then(href => {
        cy.request(href)
           .its('status')
           .should('eq',200)
      })
  })
})

或将“查找”移至第一个选择器

cy.get('.bms-scoreboard__game-tile--mls a')
  .each($a => {
    const href = $a.attr('href')
    cy.request(href)
      .its('status')
      .should('eq', 200)
  })
})