需要帮助来解决变量范围问题

需要帮助来解决变量范围问题

问题描述:

我无法访问driver.executeScript中的names数组。请提出解决方案;需要帮助来解决变量范围问题

var webdriver = require('selenium-webdriver'), 
    By = webdriver.By, 
    until = webdriver.until; 
var driver = new webdriver.Builder().forBrowser('chrome').build(); 

var flow = webdriver.promise.controlFlow(); 
var names = ["name1", "name2"]; 
var len = names.length; 
var j = 0 
for (var i = 0; i < len; i++) { 
    flow.execute(function() { 
    console.log(names[j]); //this works fine. 
    driver.executeScript(function() { 
     //console.log(names[j]); //this gives errror [WebDriverError: unknown error: names is not defined] 
     //console.log('testing'); //this never logs 
    }); 
    j++; 
    }); 
} 
+1

按照书面,这个问题是不可能的。我可以理解,如果'name [j]'是未定义的,因为在运行executeScript回调的任何异步代码之前j最终会变成2(假设这是异步的),但是你说错误是'names'是未定义...这是不可能的 –

+0

借调。这似乎是无稽之谈。我建议你尝试在JSFiddle中重新创建这个错误 - 我无法相信你所报告的错误确实在你描述的时候发生。 – AmericanUmlaut

+0

我无法在jsfiddle上重现它,因为它使用了chrome web驱动程序。我甚至尝试过cloud9 ide,但那也没有奏效。 – Triven

您可以使用参数定义函数,并将名称传递给它;

for(var i=0;i<len;i++){ 
    flow.execute(function(){ 
     console.log(names[j]); //this works fine. 
     driver.executeScript(func(names[j])) 
     j++; 
    }); 
} 

function func(name) { 
    console.log(name); 
    console.log('testing'); 
} 

更好的规避访问全局变量,试图通过变量&返回它们保持可读&维护的代码。

+0

为什么要访问OP的全局变量,如问题所示会给出错误? – nnnnnn

+0

它不应该,但不知怎的,司机可能有一个孤立的范围,但我的答案解决它而不关心,对不对? –

+0

不知道为什么3倒票..我也怀疑在这里孤立范围。 @bureaquete答案解决了这个问题。注意:回复时间不长,因为我正在尝试创建此问题的工作演示。我试过cloud9,runnable.com/等,但没有运气..如果你认为这是不可能的,那么我请求你尝试在你的系统上重现。 – Triven

注意:谢谢你@bureaquete为你解答。这也适用于我。

var webdriver = require('selenium-webdriver'), 
    By = webdriver.By, 
    until = webdriver.until; 
var driver = new webdriver.Builder().forBrowser('chrome').build(); 

var flow = webdriver.promise.controlFlow(); 
var names = ["name1","name2"]; 
var len = names.length; 
var j=0 
for(var i=0;i<len;i++){ 
    flow.execute(function(name) { 
    return function(){ 
     var str = console.log(name); 
    } 
    }(names[j])); 
j++ 
} 
+1

查看更新评论:) – Triven

+0

@trieven你能检查吗?你有这个问题吗? jsbin.com/boholukafa/edit?js,console,output用我的答案你得到正确的日志,但也是一个错误呢?另外,如果您可以批准我的修改,我会提出您的问题 –