0

这是 EX 调用的简单全局变量:循环外的 this.u5boys。

u5boys: {
    xpath: "option[contains(text(), '5 Boys')]"
  },
  u6boys: {
    xpath: "option[contains(text(), '6 Boys')]"
  },

这是一个简单的循环,它将在运行时尝试单击文字字符串“this.u5boys”。如何使它将 this.u5boys 处理为上述同一文件中的全局 xpath 标识符?

ctrlClick5To6Folders(){

    for(var i = 5; i < 7; i++){
      boysaction = "this.u" + i + "boys";
      I.click(boysaction);
    }

  },

我如何告诉它在运行 I.click() 函数之前处理 this.u5boys 的值?

4

2 回答 2

1

结果是“this.u5boys”

这很正常,鉴于此:

for(var i = 5; i < 7; i++){
  boysaction = "this.u" + i + "boys";
  I.click(boysaction);
}

boysaction = "this.u" + i + "boys"; "boysaction"在这种情况下只是一个字符串对象。

像这样的东西应该工作

for(var i = 5; i < 7; i++){
  boysaction = "this.u" + i + "boys";
  I.click(window[boysaction].xpath);//this one
  I.click(this[boysaction].xpath);//or this one
}

在这里,“boysaction”string表示上下文namevariable可用的。window

于 2017-10-31T18:09:12.830 回答
1

您需要使用 Object.keys 来获取密钥并使用它们。

尝试这个:

var globals = {
  u5boys: {
    xpath: "option[contains(text(), '5 Boys')]"
  },
  u6boys: {
    xpath: "option[contains(text(), '6 Boys')]"
  }
}

Object.keys(globals).forEach((key) => console.log(globals[key].xpath));

这将在控制台中打印出 xpath。如果要调用服装功能,可以执行以下操作:

Object.keys(globals).forEach((key) => I.click(globals[key].xpath)); 

如果你只想要第 5 和第 6,可以这样做:

Object.keys(globals).forEach((key) => {
    if(key != "u5boys" && key != "u6boys")
        return;

    console.log(globals[key].xpath);
})
于 2017-10-31T18:15:48.907 回答