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