传递带有逗号值的参数(欧洲十进制格式)

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)