如何在赛普拉斯测试中进行计算
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)"))
我需要检查一组具有特定 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)"))