下拉菜单下的选项未被选中

时间:2015-04-14 08:02:12

标签: javascript html-select casperjs

测试场景是,

  1. 创建一个单元格,
  2. 从下拉菜单(从R到Python)更改语言,
  3. 输入代码并执行。下拉菜单的HTML代码是
  4. <select class="form-control cell-control-select cell-control">
        <option>Markdown</option>
        <option>R</option>
        <option>Python</option>
        <option>RMarkdown</option>
    </select>
    

    以下是我的casperjs代码

    casper.then(function(){
        this.mouse.click({ type: 'xpath' , path: "/html/body/div[3]/div/div[2]/div/div[3]/div[1]/div/select"});//x path for dropdown menu
        this.echo('clicking on dropdown menu');
        this.wait(3000);
    });
    
    casper.then(function(){
        var z = this.evaluate(function() {
        document.querySelector('.form-control').selectedIndex = 2;
        return true;
        });
        this.wait(3000);
    });
    

    它从下拉菜单中选择Python语言,但是当我们运行代码时,它在提示单元格中显示错误。我们在python语言单元格中运行R代码时得到的错误。

1 个答案:

答案 0 :(得分:1)

问题可能是选择框上有一个不会被调用的更改侦听器,因为设置selectedIndex属性不会触发更改。

触发此更改的可靠方法是使用jQuery's change()

this.evaluate(function() {
    var form = document.querySelector('.form-control');
    form.selectedIndex = 2;
    $(form).change();
});

如果您在页面中还没有jQuery,如果您在本地使用jQuery,则可以像这样注入它:

var casper = require('casper').create({
    clientScripts: [ "jquery.min.js" ]
});

或者如果您没有在本地使用它:

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