gpt4 book ai didi

javascript - nightwatchjs - 如何等到ajax调用完成

转载 作者:数据小太阳 更新时间:2023-10-29 05:35:40 25 4
gpt4 key购买 nike

我正在使用 nightwatchJS 实现浏览器自动化。我看到的一个常见用例是,我网页中的大部分内容都是通过来自 ajax 调用的数据更新的。因此,在我的测试中,我正在寻找一种方法来保持我的测试,直到我从 Ajax 获得结果。为此,我在 nightwatch 或 selenium 中找不到任何 api。

我已经尝试使用 waitForElementVisible,但我觉得这还不够。如果我的 ajax 调用没有返回任何数据会发生什么。

有人试过吗?

最佳答案

如果你知道这里的ajax路径是如何解决它的方式,这个想法是将“ajaxComplete”事件附加到客户端并匹配执行的请求路径:

client
.timeoutsAsyncScript(15000) // set async exec timeout
.click('.btn-submit') // ajax form submit
.executeAsync(
function(targetUrl, done){
var nightwatchAjaxCallback = function(ajaxUrl) {
if(ajaxUrl.indexOf(targetUrl) === 0) { // if url match notify script that xhr is done
done(true);
}
};

if(!window.nightwatchAjaxInited) { // make sure ajaxComplete is attached only once

window.nightwatchAjaxInited = true;

$(document).ajaxComplete(function(e, res, req) {
nightwatchAjaxCallback(req.url);
});
}
},
['/ajaxpath'], // expected xhr request path
function(status){
// executes once ajax is done
client.verify.containsText('.entry', 'lorem ipsup...') // verify post is created
}
);

这是根据上面的代码创建的名为“ajaxWait”的命令:

exports.command = function(targetUrl, action, callback) {

this.timeoutsAsyncScript(15000);

action();

this.executeAsync(function(targetUrl, done){

var nightwatchAjaxCallback = function(ajaxUrl) {
if(ajaxUrl.indexOf(targetUrl) === 0) {
done(true);
}
};

if(!window.nightwatchAjaxInited) {

window.nightwatchAjaxInited = true;

$(document).ajaxComplete(function(e, res, req) {
nightwatchAjaxCallback(req.url);
});
}

}, [targetUrl], function(status){

callback();
});
};

调用应该是这样的:

client.ajaxWait('/ajaxpath', function(){
// ajax form submit
client.click('.btn-submit') // ajax form submit
}, function(){
// executes once ajax is done
client.verify.containsText('.entry', 'lorem ipsup...') // verify post is created
})

关于javascript - nightwatchjs - 如何等到ajax调用完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32863866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com