javascript - 无法使用 CasperJS 触发 GWT 列表框 ChangeHandler

标签 javascript gwt phantomjs html-select casperjs

我正在使用 CasperJS 为旧版 GWT (2.3) 代码编写测试。

我可以更改列表框的选定值。

document.querySelector('#id_of_select').selectedIndex = 1;

但这不会触发 ListBox 上更改处理程序的 onChange() 方法。

我尝试在选择元素上手动调度更改事件(jquery 在页面上不可用):

var evt = document.createEvent("manualchange");
        evt.initEvent("change", false, true);
document.querySelector('#id_of_select').dispatchEvent(evt);

我也尝试过这种方法。

document.querySelector('#id_of_select').dispatchEvent(new Event('change', { 'bubbles': true }));

这两种方法都不会触发更改处理程序的 onChange 方法。任何人都可以建议一种方法来使其正常工作吗?

最佳答案

jQuery 方式似乎适用于 such cases :

casper.fillSelect = function(selectSelector, id){
    this.evaluate(function(sel, id) {
        var select = jQuery(sel);
        select[0].selectedIndex = id;
        select.change();  
    }, selectSelector, id);
};

casper.fillSelect('#id_of_select', 1);

要实现这一点,您只需将本地副本添加到 options.clientScripts 即可将 jQuery 加载到页面中。或远程复制到 options.remoteScripts :

var casper = require("casper").create({
    clientScripts: [ "jquery.min.js" ],
    // or
    remoteScripts: [ "http://code.jquery.com/jquery-1.11.3.min.js" ]
});

还有another way通过在选择字段上按下鼠标按钮并在特定选项上释放鼠标按钮来执行此操作:

casper.mouse.down("#id_of_select");
casper.mouse.up('#id_of_select > option:nth-child(2)'); // the second option

关于javascript - 无法使用 CasperJS 触发 GWT 列表框 ChangeHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30464945/

相关文章:

javascript - 如何覆盖 window.screen?

javascript - 哪个文件先下载? CSS 或 JS

java - GWT 中 RPC 调用后的流程?

html - 如何显示应该溢出父容器的元素?

image - 在 GWT 中,为什么 image.setURL ("/SimpleCaptcha.jpg") 刷新图像在 Firefox 中不起作用?

python - 在 selenium webdriver.PhantomJS 上设置超时

javascript - 这是实现计时器的坏方法吗?

javascript - 淡入内容和淡出当前 Div?

javascript - 在 AngularJs 中读取和解析 CSV 文件

javascript - PhantjomJS 重定向原始 URL 请求