Javascript 自定义函数,用于选择并单击Nightwatch中的随机元素
我是e2e测试(和JS)的新手。我使用夜间监视框架 我试图创建一个函数,用同一个选择器从元素列表中选择一个随机元素,然后单击它 这就是我所尝试的:Javascript 自定义函数,用于选择并单击Nightwatch中的随机元素,javascript,testing,automated-tests,nightwatch.js,e2e-testing,Javascript,Testing,Automated Tests,Nightwatch.js,E2e Testing,我是e2e测试(和JS)的新手。我使用夜间监视框架 我试图创建一个函数,用同一个选择器从元素列表中选择一个随机元素,然后单击它 这就是我所尝试的: pickOne(selector, target) { this.api.elements(selector, target, function(res) { optionsLength = Math.floor((Math.random() * res.value.length) + 1); }); thi
pickOne(selector, target) {
this.api.elements(selector, target, function(res) {
optionsLength = Math.floor((Math.random() * res.value.length) + 1);
});
this.api.waitForElementVisible(`${target}:nth-child(${optionsLength})`);
this.api.click(`${target}:nth-child(${optionsLength}) .action-button`);
}
但在这种情况下,选项长度未定义
Math.floor((Math.random()*res.value.length)+1)
返回一个数字。我想在函数之外使用这个数字
我尝试将完整函数存储在变量中,如下所示:
const optionsLength = this.api.elements(selector, element, function(res) {
Math.floor((Math.random() * res.value.length) + 1);
});
但是那样的话,optionsLength
记录的是一个数字。用箭头语法声明函数并将所有内容包装到回调中解决了(范围)问题
箭头语法允许在回调中继续调用this.api.x
pickOne(selector, target) {
this.api.elements(selector, target, res => {
optionsLength = Math.floor((Math.random() * res.value.length) + 1);
this.api.waitForElementVisible(`${target}:nth-child(${optionsLength})`);
this.api.click(`${target}:nth-child(${optionsLength}) .action-button`);
});
}
}在回调中定义第二个和第三个函数不好,这会导致回调地狱
您应该改用.perform()
api,它将链接您的函数:
pickOne(selector, target) {
this.api.elements(selector, target, function(res) {
optionsLength = Math.floor((Math.random() * res.value.length) + 1);
})
.perform(function (client, done) {
console.log(optionsLength) ;// ***you can access optionsLength in above function***
done();
})
我是夜视的医生
pickOne(selector, target) {
this.api.elements(selector, target, function(res) {
optionsLength = Math.floor((Math.random() * res.value.length) + 1);
})
.perform(function (client, done) {
console.log(optionsLength) ;// ***you can access optionsLength in above function***
done();
})