【问题标题】:Extracting selector variable names from JSON data从 JSON 数据中提取选择器变量名称
【发布时间】:2021-08-02 18:23:30
【问题描述】:

给定以下 json:

{
  "contract": [
    {"fieldName": "contractYear", "fieldValue": "2020"},
    ...
  ],
  "ruleSet": [
    ...
  ]
}

还有以下内容:

staticCompany.contract.forEach(index => {
  if (this.index.fieldName.getText() == index.fieldValue) {
    validationCount ++;
  }
});

我知道这个事实。操作员不会喜欢我正在尝试做的事情。有没有办法提取 fieldName 以便我可以使用它来点击同名的选择器?

我在 wdio v5 的 Node 12.13 中执行此操作。

【问题讨论】:

  • 您的意思是this[index] 而不是this.index
  • 根本不需要this - 只需将this.index 替换为index 即可。但是index 是实际数组元素的名称选择不佳
  • 实际上,经过反思,这可能不是您想要的 - 但我不知道您确实想要什么。您能否编辑您的问题以使输入和预期输出更清晰?
  • fieldName 值是否真的等于fieldValue 值?
  • 在您的forEach() 语句中,this 指的是window。此外, for each 仅传递数组的索引号。如果您想查看forEach() 中的值,您需要像这样传递元素:forEach((element) => { ... } )。见:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

标签: javascript wdio-v5


【解决方案1】:

在您的forEach() 语句中,this 指的是窗口,因此您不想使用它。

另外,for each 只是传入数组的索引号。如果您想查看forEach() 中的值,您还需要包含该元素(好吧,从技术上讲,在您的 for each 中,index 正在带回该元素,因为它首先列出,但从语法上讲,如果您正在使用index,而它实际上不是索引)。

所有这些都是有效的选项:

forEach((element) => { ... } )
forEach((element, index) => { ... } )
forEach((element, index, array) => { ... } )

请参阅MDN: Array.ForEach() 了解更多信息。

在下面的 sn-p 中,我将第二个 Object 元素添加到 contract 数组中,以向您展示如何访问该数组中的每个 Object 元素,并从中获取值。

const staticCompany = {
  "contract": [{
      "fieldName": "contractYear",
      "fieldValue": "2020"
    },
    {
      "fieldName": "contractYear",
      "fieldValue": "2021"
    },
  ],
  "ruleSet": []
}

staticCompany.contract.forEach((element, index) => {
  console.log({
    index: index,
    fieldName: element.fieldName,
    fieldValue: element.fieldValue
  })
});

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 2017-05-10
    • 2019-06-24
    • 1970-01-01
    • 2015-03-04
    • 2014-08-16
    • 2019-10-08
    • 2018-09-05
    相关资源
    最近更新 更多