传递带有逗号值的参数(欧洲十进制格式)
Passing parameters with comma values (European decimal format)
我在 Cypress 中写了一个可重用的函数:
fill_prices_ht_nt(until, AP, GP, AP_NT, new_bonus){
this.add_range().click({force:true})
this.range_until().type(until)
this.ap().type(AP)
this.gp().type(GP)
this.ap_nt().type(AP_NT)
this.new_bonus().type(new_bonus)
现在我想使用该函数输入值,但不幸的是我需要输入欧洲格式的十进制值(使用逗号而不是句点),例如“9,35”或“6,47”
pmmt.fill_prices_ht_nt(99999, 10, 9,35, 6,47, 100)
这当然行不通,因为 Cypress/JS 将每个逗号都视为分隔符。
是否有解决此问题的简单方法?否则我将不得不转储可重用函数并对值进行硬编码。
您可以将数字作为字符串提供,如下所示:
pmmt.fill_prices_ht_nt("99999", "10", "9,35", "6,47", "100")
然后编写一个实用函数将这些字符串转换为数字:
function toNumber(val) {
if (typeof val !== "string") {
return val;
}
return +val.replace(/,/g, ".");
}
(一元 +
只是进行 string-to-number 转换的一种方法,我在 中提供了一个包含优点和常量的列表。)
并在您的函数中使用它:
fill_prices_ht_nt(until, AP, GP, AP_NT, new_bonus) {
until = toNumber(until);
AP = toNumber(AP);
GP = toNumber(GP);
AP_NT = toNumber(AP_NT);
new_bonus = toNumber(new_bonus);
this.add_range().click({force:true});
this.range_until().type(until);
this.ap().type(AP);
this.gp().type(GP);
this.ap_nt().type(AP_NT);
this.new_bonus().type(new_bonus);
}
如果您不介意使用临时数组,您可以使用解构来一次完成所有转换:
function toNumberList(...vals) {
return vals.map(toNumber);
}
然后使用它:
fill_prices_ht_nt(until, AP, GP, AP_NT, new_bonus) {
[until, AP, GP, AP_NT, new_bonus] = toNumberList(until, AP, GP, AP_NT, new_bonus);
this.add_range().click({force:true});
this.range_until().type(until);
this.ap().type(AP);
this.gp().type(GP);
this.ap_nt().type(AP_NT);
this.new_bonus().type(new_bonus);
}
假定 ES2015+ 环境(因为它使用解构)。
你如何使用 pmmt.fill_prices_ht_nt
并将所有数字作为字符串。
pmmt.fill_prices_ht_nt('99999', '10', '9,35', '6,47', '100')
因为当我看到柏树 type 时,在语法中它说 type
接受这两种格式:
.type(text)
.type(text, options)
这里还有一个选项,使用 toLocaleString()
fill_prices_ht_nt(until, AP, GP, AP_NT, new_bonus) {
this.add_range().click({force:true})
this.range_until().type(until)
this.ap().type(AP.toLocaleString('de-DE'))
this.gp().type(GP.toLocaleString('de-DE')) // AP.toLocaleString('de-DE') = 9,35
this.ap_nt().type(AP_NT.toLocaleString('de-DE'))
this.new_bonus().type(new_bonus.toLocaleString('de-DE'))
测试中,带小数通过,会随着你的转换.type()
pmmt.fill_prices_ht_nt(99999, 10, 9.35, 6.47, 100)
或者,如果您要处理其他语言环境,您可以添加一种方法来设置格式
set_number_format(number_format) {
this.number_format = number_format
}
fill_prices_ht_nt(until, AP, GP, AP_NT, new_bonus) {
this.add_range().click({force:true})
this.range_until().type(until)
this.ap().type(AP.toLocaleString(this.number_format))
this.gp().type(GP.toLocaleString(this.number_format))
this.ap_nt().type(AP_NT.toLocaleString(this.number_format))
this.new_bonus().type(new_bonus.toLocaleString(this.number_format))
在测试中,
pmmt.set_number_format('de-DE')
pmmt.fill_prices_ht_nt(99999, 10, 9.35, 6.47, 100)
...
pmmt.set_number_format('en-IN')
pmmt.fill_prices_ht_nt(99999, 10, 9.35, 6.47, 100)
我在 Cypress 中写了一个可重用的函数:
fill_prices_ht_nt(until, AP, GP, AP_NT, new_bonus){
this.add_range().click({force:true})
this.range_until().type(until)
this.ap().type(AP)
this.gp().type(GP)
this.ap_nt().type(AP_NT)
this.new_bonus().type(new_bonus)
现在我想使用该函数输入值,但不幸的是我需要输入欧洲格式的十进制值(使用逗号而不是句点),例如“9,35”或“6,47”
pmmt.fill_prices_ht_nt(99999, 10, 9,35, 6,47, 100)
这当然行不通,因为 Cypress/JS 将每个逗号都视为分隔符。
是否有解决此问题的简单方法?否则我将不得不转储可重用函数并对值进行硬编码。
您可以将数字作为字符串提供,如下所示:
pmmt.fill_prices_ht_nt("99999", "10", "9,35", "6,47", "100")
然后编写一个实用函数将这些字符串转换为数字:
function toNumber(val) {
if (typeof val !== "string") {
return val;
}
return +val.replace(/,/g, ".");
}
(一元 +
只是进行 string-to-number 转换的一种方法,我在
并在您的函数中使用它:
fill_prices_ht_nt(until, AP, GP, AP_NT, new_bonus) {
until = toNumber(until);
AP = toNumber(AP);
GP = toNumber(GP);
AP_NT = toNumber(AP_NT);
new_bonus = toNumber(new_bonus);
this.add_range().click({force:true});
this.range_until().type(until);
this.ap().type(AP);
this.gp().type(GP);
this.ap_nt().type(AP_NT);
this.new_bonus().type(new_bonus);
}
如果您不介意使用临时数组,您可以使用解构来一次完成所有转换:
function toNumberList(...vals) {
return vals.map(toNumber);
}
然后使用它:
fill_prices_ht_nt(until, AP, GP, AP_NT, new_bonus) {
[until, AP, GP, AP_NT, new_bonus] = toNumberList(until, AP, GP, AP_NT, new_bonus);
this.add_range().click({force:true});
this.range_until().type(until);
this.ap().type(AP);
this.gp().type(GP);
this.ap_nt().type(AP_NT);
this.new_bonus().type(new_bonus);
}
假定 ES2015+ 环境(因为它使用解构)。
你如何使用 pmmt.fill_prices_ht_nt
并将所有数字作为字符串。
pmmt.fill_prices_ht_nt('99999', '10', '9,35', '6,47', '100')
因为当我看到柏树 type 时,在语法中它说 type
接受这两种格式:
.type(text)
.type(text, options)
这里还有一个选项,使用 toLocaleString()
fill_prices_ht_nt(until, AP, GP, AP_NT, new_bonus) {
this.add_range().click({force:true})
this.range_until().type(until)
this.ap().type(AP.toLocaleString('de-DE'))
this.gp().type(GP.toLocaleString('de-DE')) // AP.toLocaleString('de-DE') = 9,35
this.ap_nt().type(AP_NT.toLocaleString('de-DE'))
this.new_bonus().type(new_bonus.toLocaleString('de-DE'))
测试中,带小数通过,会随着你的转换.type()
pmmt.fill_prices_ht_nt(99999, 10, 9.35, 6.47, 100)
或者,如果您要处理其他语言环境,您可以添加一种方法来设置格式
set_number_format(number_format) {
this.number_format = number_format
}
fill_prices_ht_nt(until, AP, GP, AP_NT, new_bonus) {
this.add_range().click({force:true})
this.range_until().type(until)
this.ap().type(AP.toLocaleString(this.number_format))
this.gp().type(GP.toLocaleString(this.number_format))
this.ap_nt().type(AP_NT.toLocaleString(this.number_format))
this.new_bonus().type(new_bonus.toLocaleString(this.number_format))
在测试中,
pmmt.set_number_format('de-DE')
pmmt.fill_prices_ht_nt(99999, 10, 9.35, 6.47, 100)
...
pmmt.set_number_format('en-IN')
pmmt.fill_prices_ht_nt(99999, 10, 9.35, 6.47, 100)