【问题标题】:options under dropdown menu is not getting selected下拉菜单下的选项未被选中
【发布时间】:2015-04-14 08:02:12
【问题描述】:

测试场景是,

  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 代码时,我们会遇到同样的错误。

【问题讨论】:

  • 您看到的错误是什么?更改所选索引后,是否在截屏时显示选择了“Python”?选择框是否可能隐藏,实际的下拉菜单是用 HTML+CSS+JS 实现的?
  • 是的,它在下拉菜单中显示“Python”。我只使用简单的 python 代码,即 a=50;print a。当它执行时(在下拉菜单中选择了 Python),它显示“解析错误::1:12:意外符号 1:a=50;打印 a”错误。当我们在 R 中运行 python 代码时会发生此错误。

标签: javascript html-select casperjs


【解决方案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" ]
});

【讨论】:

  • 上述解决方案有效......谢谢。但之后当我执行代码时,应用程序变得无响应......并且不执行它就会退出脚本。
  • 感谢上述解决方案仅在我键入一些代码时才有效,并且我更改了下拉列表,但是当我在输入代码之前更改下拉值时,它开始执行空单元格。它不会转到将代码添加到单元格中的代码的下一行
  • "solution only when I type some code"中的"code"是什么意思?您是在谈论需要在页面上输入的内容吗?如果是,那我帮不了你,因为我不知道你说的是哪个页面。
  • 嘿,我可以使用 xpath 来解决上述问题吗?如果那我怎么用那个?
  • 当然,在casper.evaluate() 中使用document.evaluate():stackoverflow.com/questions/10596417/…
猜你喜欢
  • 1970-01-01
  • 2018-02-16
  • 2021-03-07
  • 1970-01-01
  • 2023-03-31
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多