你能解释一下吗?
JAVASCRIPT
By byXpath = By.xpath("//*[starts-with(@id,'result_')]//div//div[1]//div//a//img");
List <WebElement> listofItems = wd.findElements(byXpath);
for (int i=1; i<=listofItems.size(); i++)
{
//I would suggest you to see if you can improve the selector though
By by= By.xpath("//*[starts-with(@id,'result_')]//div//div[1]//div//a//img[" + i + "]");
WebElement myDynamicElement = (new wd(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(by));
System.out.println(i);
myDynamicElement.click();
wd.navigate().back();
}
输出
if (typeof Array.prototype.contains != 'function') {
Array.prototype.contains = function (str){
return this.indexOf(str) > -1;
};
}
var text = "Hello world";
var tokens = text.split(" ");
console.log(tokens.length);
for (var i in tokens){
console.log(tokens[i]);
}
换句话说,&#34;包含&#34;我添加到Array原型的函数作为最后一个元素出现在for循环中(但是数组长度为2)。为什么呢?
答案 0 :(得分:3)
为什么?
因为for-in
doesn't loop through array entries,它会遍历对象的可枚举属性。您已在Array.prototype
上创建了一个新的可枚举属性,因此该属性显示在任何数组的for-in
循环中。
解决方案是:
不要那样做,而是遍历数组in any of several ways that don't have that problem或
使用hasOwnProperty
过滤掉继承的属性(请参阅上面的链接了解更多信息)或
通过contains
或类似内容将Object.defineProperty
定义为不可枚举的属性(您只能在ES5 +引擎上执行此操作,无法对其进行填充)。