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

options under dropdown menu is not getting selected

测试场景是,

  1. 正在创建一个单元格,
  2. 从下拉菜单中更改语言(从 R 到 Python),
  3. 输入代码并执行。 HTML 下拉菜单的代码是
<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 代码时遇到同样的错误。

问题可能是 select 框中的更改侦听器未被调用,因为设置 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" ]
});