如何让 casperJS 等到 .change() 事件完成
How to make casperJS wait until .change() event is finished?
我在我的casperJS脚本中触发了一个更改事件,该事件触发了如下的AJAX请求:
casper.evaluate(function(i) {
$("form:eq(2) select option:eq(" + i + ")").attr("selected", "selected").change();
},i);
如何让 casperJS 等到底层 AJAX 请求完成?已经尝试查看文档,但我或多或少陷入困境。谁能引导我走向正确的方向?
您始终可以使用 casper.wait
以静态方式执行此操作。
casper.thenEvaluate(function(i) {
// change()
},i).wait(5000).then(function(){
// further processing
});
并希望请求在 5 秒内完成,但当请求比 5 秒早得多时,您可能会浪费一些等待时间。问题是,一旦请求完成并不意味着页面已准备就绪/已更改。
另一种可能性是等待请求完成,但要使其正常工作,您需要以某种方式注册请求的成功事件。大多数情况下,您无法从全局范围访问此内容。如果你这样做,那么你可以使用
casper.thenEvaluate(function(i) {
window._someUniqueVariable = false;
registerSuccessEvent(function(data){
window._someUniqueVariable = true;
});
},i).waitFor(function check(){
return this.evaluate(function(){
window._someUniqueVariable = true;
});
}, function(){
// further processing
});
一种更卡斯珀的方法是使用 casper.waitForResource
,但随后您需要事先知道 url 或至少能够从页面推断出它。
在一般情况下,当请求返回时,它会对您的页面执行某些操作。因此,您应该能够使用新元素或waitForSelectorTextChange
或waitUntilVisible
等进行waitForSelector
。
你可能错过了waitForResource
来自文档: http://casperjs.readthedocs.org/en/latest/modules/casper.html#waitforresource
casper.waitForResource("you url here", function()
{
// place your code here
});
相关文章:
- Bootstrap 3 Datepicker v4:dp.show和dp.change事件在Datepicker内联时不
- 在change事件javascript上动态添加行
- 了解'这'在jQuery on change事件中
- 为什么我的on change事件在ie9上返回空
- jQuery.change()事件未被触发
- 在on.change事件之后运行函数
- 选择使用 jQuery 接收 change() 事件的表单的提交按钮
- 使用 ng-change 对输入类型数据进行 JavaScript 取消事件
- 从服务器获取数据,并使用$http服务和ng-change在select事件上显示它
- 试图通过模块模式在DOM元素上实现change()事件
- 收听Aloha编辑器“aloha-smart-content-change”事件
- 将 on('change') 的事件侦听器添加到 Google 地图信息窗口
- 当 ng-change 事件发生时,函数不会在角度 js 中调用
- IE 的行为与 jQuery change/ajax 事件不一致
- 如何在角度 UI 开关中获得 ng-change 事件
- 使用 .change Jquery 事件更改内容
- 将当前元素发送到 ng-change 事件
- 检测复选框是否在 Angular.js ng-change 事件中处于选中状态
- 与jQuery“change()”事件的反面是什么
- Dojo 等效于事件 .change()