如何在赛普拉斯测试中进行计算

How to do calculations in cypress testing

我需要检查一组具有特定 class 关联并具有值

的标签
    <div class="ratinglabel col-6">
        <label>Area 1: Professional Engagement 
            <span test-data="area_1_Scor">
                (4/16)
            </span>
        </label>
    </div>

我想找到 (4/16*5) 并将它们保存在 var 中以将它们与另一个值进行比较

我这样做了:

    cy.get('[test-data="area_1_Scor"]', { timeout: 2000 })
    .then(function($ele) {   
      var countOfElements = $ele*5;
      cy.log(countOfElements);
    });
  })

   cy.get('[test-data="area_1_Scor"]').each(($li, index, $lis) => {
      var sum = 0;
      Cypress.$('[test-data="area_1_Scor"]').each(function() {
        sum = +Cypress.$(this).text()*5||0;
      });
      cy.log("Total sum of all span elements:"+sum);
      
      })

但日志在第一种情况下显示为 NaN,在第二种情况下显示为 0 那我该怎么做呢?

你就快完成了(第一个块),但你需要 1) 从元素中提取文本并 2) 将文本解析为数字

cy.get('[test-data="area_1_Scor"]', { timeout: 2000 })
  .invoke('text')
  .then(text => {
    const numerator = +text.split('/')[0].replace('(', '')
    const denominator = +text.split('/')[1].replace(')', '')
    const countOfElements = numerator * 5 / denominator;
    cy.log(countOfElements);
  });
})

你的第二个块表示有多个元素,如果是这样使用 .each() 像这样

let sum = 0;
cy.get('[test-data="area_1_Scor"]', {timeout: 2000})
  .each($el => {

    cy.wrap($el).invoke('text')
      .then(text => {
        const numerator = +text.split('/')[0].replace('(', '')
        const denominator = +text.split('/')[1].replace(')', '')
        const countOfElements = numerator * 5 / denominator;
        sum += countOfElements
      }) 
  })
})
.then(() => cy.log(sum))

考数学

const times5 = (text) => {
  const numerator = +text.split('/')[0].replace('(', '')
  const denominator = +text.split('/')[1].replace(')', '')
  return Math.round(numerator * 5 / denominator)
}

let sum = 0;
cy.get('[test-data="area_1_Scor"]', {timeout: 2000})
  .each($el => {
    cy.wrap($el).invoke('text')
      .then(times5)                   // text is passed in automatically
      .then(result => sum += result)
  })
})
.then(() => cy.log(sum))

所以你可以用

检查函数
cy.log(times5("(4/16)"))