Javascript Nightwatch.js-使用变量供以后在另一个函数中使用赢得';行不通

Javascript Nightwatch.js-使用变量供以后在另一个函数中使用赢得';行不通,javascript,nightwatch.js,Javascript,Nightwatch.js,我已经研究过这个问题,但找不到合适的解决方案。以下是我试图做的事情(我正在使用nightwatch v0.9.8和“selenium-server-standalone-3.0.0-beta3”): 。。。但是“.perform()”函数中的单击不起作用?找到了解决方案 我的问题是我不知道.execute()函数实际上是如何工作的。它的作用域仅限于document对象,因此如果我想让变量保留我想要的值,我必须通过回调函数来实现 此外,客户机对象及其步骤都是在执行.execute()函数之前实例化

我已经研究过这个问题,但找不到合适的解决方案。以下是我试图做的事情(我正在使用nightwatch v0.9.8和“selenium-server-standalone-3.0.0-beta3”):

。。。但是“.perform()”函数中的单击不起作用?

找到了解决方案

我的问题是我不知道
.execute()
函数实际上是如何工作的。它的作用域仅限于document对象,因此如果我想让变量保留我想要的值,我必须通过
回调
函数来实现

此外,
客户机
对象及其步骤都是在执行
.execute()
函数之前实例化的,此时,
选择器
值仍然是未定义的。这就是为什么需要
perform()
函数的原因。代码如下所示:

   for (var i = 0; i < estados.length; i++){
     if (estados[i].innerHTML == "Suspender") {
       a = i+1;
       servico = div[i].getElementsByTagName('span')[0].innerHTML;
       dataCriado = div[i].getElementsByTagName('span')[1].innerHTML;
       selector = "#div-container > div:nth-child(4) > div > div > div > div:nth-child(2) > div.div-group-info-medium > div > div > div.listaEtapasServicos.scroll-pane-pattern.scroll-pane-medium.ps-container.ps-active-y > div:nth-child("+ a +") > div.grid-padroes-geral.grid-col-100.text-left > a";
       client.click(selector);
       break;
      }
   }
  }, [])
 .execute(function () {
   var estados = document.getElementsByClassName('listaEtapasServicos')[0].getElementsByTagName("a");
   var div = document.getElementsByClassName('listaEtapasServicos')[0].getElementsByClassName("grid-cons-medium");


   for (var i = 0; i < estados.length; i++) {
     if (estados[i].innerHTML == "Suspender") {
       a = i + 1;
       servico = div[i].getElementsByTagName('span')[0].innerHTML;
       dataCriado = div[i].getElementsByTagName('span')[1].innerHTML;
       selector = "div.grid-cons-medium:nth-child("+a+") > div:nth-child(4) > a:nth-child(1)";
       return [a, servico, dataCriado, selector];
     }
   }
 }, [], function (result) {

   a = result.value[0];
   servico = result.value[1];
   dataCriado = result.value[2];
   selector = result.value[3];

 })

 .perform(function(){
    client.waitForElementPresent(selector, 10000);
    client.click(selector);
 })
.execute(函数(){
var estados=document.getElementsByClassName('listaEtapasServicos')[0].getElementsByTagName(“a”);
var div=document.getElementsByClassName('listaEtapasServicos')[0].getElementsByClassName(“网格介质”);
对于(变量i=0;idiv:n个子项(4)>a:n个子项(1)”;
返回[a、servico、dataCriado、选择器];
}
}
},[],函数(结果){
a=结果值[0];
servico=结果值[1];
dataCriado=result.value[2];
选择器=结果。值[3];
})
.perform(函数){
client.waitForElementPresent(选择器,10000);
客户端。单击(选择器);
})
现在一切正常。

找到了解决方案

我的问题是我不知道
.execute()
函数实际上是如何工作的。它的作用域仅限于document对象,因此如果我想让变量保留我想要的值,我必须通过
回调
函数来实现

此外,
客户机
对象及其步骤都是在执行
.execute()
函数之前实例化的,此时,
选择器
值仍然是未定义的。这就是为什么需要
perform()
函数的原因。代码如下所示:

   for (var i = 0; i < estados.length; i++){
     if (estados[i].innerHTML == "Suspender") {
       a = i+1;
       servico = div[i].getElementsByTagName('span')[0].innerHTML;
       dataCriado = div[i].getElementsByTagName('span')[1].innerHTML;
       selector = "#div-container > div:nth-child(4) > div > div > div > div:nth-child(2) > div.div-group-info-medium > div > div > div.listaEtapasServicos.scroll-pane-pattern.scroll-pane-medium.ps-container.ps-active-y > div:nth-child("+ a +") > div.grid-padroes-geral.grid-col-100.text-left > a";
       client.click(selector);
       break;
      }
   }
  }, [])
 .execute(function () {
   var estados = document.getElementsByClassName('listaEtapasServicos')[0].getElementsByTagName("a");
   var div = document.getElementsByClassName('listaEtapasServicos')[0].getElementsByClassName("grid-cons-medium");


   for (var i = 0; i < estados.length; i++) {
     if (estados[i].innerHTML == "Suspender") {
       a = i + 1;
       servico = div[i].getElementsByTagName('span')[0].innerHTML;
       dataCriado = div[i].getElementsByTagName('span')[1].innerHTML;
       selector = "div.grid-cons-medium:nth-child("+a+") > div:nth-child(4) > a:nth-child(1)";
       return [a, servico, dataCriado, selector];
     }
   }
 }, [], function (result) {

   a = result.value[0];
   servico = result.value[1];
   dataCriado = result.value[2];
   selector = result.value[3];

 })

 .perform(function(){
    client.waitForElementPresent(selector, 10000);
    client.click(selector);
 })
.execute(函数(){
var estados=document.getElementsByClassName('listaEtapasServicos')[0].getElementsByTagName(“a”);
var div=document.getElementsByClassName('listaEtapasServicos')[0].getElementsByClassName(“网格介质”);
对于(变量i=0;idiv:n个子项(4)>a:n个子项(1)”;
返回[a、servico、dataCriado、选择器];
}
}
},[],函数(结果){
a=结果值[0];
servico=结果值[1];
dataCriado=result.value[2];
选择器=结果。值[3];
})
.perform(函数){
client.waitForElementPresent(选择器,10000);
客户端。单击(选择器);
})
现在一切正常