使用 setInterval 在 nightwatch js 中保持滚动
using setInterval for keep scrolling in nightwatch js
我有一个 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 毫秒进行一次滚动操作,但浏览器只滚动一次(但控制台日志保持 运行ing)。谁能解决这个问题..
抱歉英语不好:(
我会做一些选择来获得你想要的行为,但我不知道哪一个会让你满意:
- 使用
perform
(See documentation here)
perform
命令使您能够执行一些代码,它可以是异步的,因此您可以执行类似示例 #1 的操作(出于某种原因,如果我将代码放在下面,它不会被格式化)
- 使用
executeAsync
(See documentation here) 代替 execute
:
execute
命令同步运行,所以可能在第一次执行后它会继续测试然后结束。因此,改为使用 executeAsync
并将整个 setInterval 函数移入其中,这样您就不需要自定义命令(恕我直言,我将删除它,因为它没有做太多事情)。参见示例 # 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
})
}
};
我有一个 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 毫秒进行一次滚动操作,但浏览器只滚动一次(但控制台日志保持 运行ing)。谁能解决这个问题..
抱歉英语不好:(
我会做一些选择来获得你想要的行为,但我不知道哪一个会让你满意:
- 使用
perform
(See documentation here)
perform
命令使您能够执行一些代码,它可以是异步的,因此您可以执行类似示例 #1 的操作(出于某种原因,如果我将代码放在下面,它不会被格式化)
- 使用
executeAsync
(See documentation here) 代替execute
:
execute
命令同步运行,所以可能在第一次执行后它会继续测试然后结束。因此,改为使用 executeAsync
并将整个 setInterval 函数移入其中,这样您就不需要自定义命令(恕我直言,我将删除它,因为它没有做太多事情)。参见示例 # 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
})
}
};