我有一个nightwatch js脚本,它将在我的网页中滚动 这是我的自定义命令脚本
'use strict'
exports.command = function (param) {
this.execute(function (param) {
$(window).scrollTop(param)
}, [param])
}
然后从我的测试文件中调用滚动脚本。这是我的剧本
module.exports = {
'Scrolling testing': function (client) {
client.url('http://localhost:1200/').waitForElementVisible('div.user-item', 5000);
let i = 50
setInterval(function () {
console.log(i)
client.scrollTo(i)
i += 50
}, 500)
}
};
我只想用setInterval每500毫秒进行一次滚动操作,但浏览器只滚动一次(但控制台日志继续运行)。任何人都可以解决这个问题..
抱歉英语不好:(答案 0 :(得分:0)
我会做一些选择来获得你想要的行为,但我不知道哪一个会让你满意:
perform
(See documentation here) perform
命令使您能够执行某些代码,它可以是异步的,因此您可以执行类似示例#1的操作(出于某种原因,如果我将代码置于其下面,则不会被格式化)
executeAsync
(See documentation here)代替execute
: execute
命令运行同步,因此可能在第一次执行后继续测试然后结束。所以相反,使用executeAsync
并在其中移动整个setInterval函数,这样你就不需要自定义命令(imho,我会删除它,因为不做那么多事情)。参见示例#2
示例#1
client
.url('http://localhost:1200/')
.waitForElementVisible('div.user-item', 5000)
.perform(function(client, done){
let i = 50, maxExecutions = 10, intervalTime = 0;
intervalTime = setInterval(function () {
console.log(i);
client.scrollTo(i);
i += 50;
maxExecutions++;
if(maxExecutions===10) {
clearInterval(intervalTime); //to prevent an infinite loop
done();
}
}, 500)
})
示例#2
module.exports = {
'Scrolling testing': function (client) {
client
.url('http://localhost:1200/')
.waitForElementVisible('div.user-item', 5000)
.executeAsync(function (param, done) {
let i = 50, maxExecutions = 10, intervalTime = 0;
intervalTime = setInterval(function () {
maxExecutions++;
console.log(i);//will be logged on browser console
$(window).scrollTop(param);
i += 50
if(maxExecutions===10){
clearInterval(intervalTime);
done(/*you can send some data here*/)
}
}, 500)
}, [], function(/*the data that you have send*/){
//do something
})
}
};