Javascript 使用带有CasperJS的标记内的文本填充表单的选择框

Javascript 使用带有CasperJS的标记内的文本填充表单的选择框,javascript,html-select,casperjs,Javascript,Html Select,Casperjs,我想填写本网站的Acheter un表格: 这就是我到目前为止所做的: var casper = require('casper').create(); casper.start('http://www.leguichet.fr/', function() { this.fill('form#search_tickets', {'departure':'1', 'arrival':'2'}, false); this.click('input[value="Rechercher"]')

我想填写本网站的Acheter un表格:

这就是我到目前为止所做的:

var casper = require('casper').create();

casper.start('http://www.leguichet.fr/', function() {
  this.fill('form#search_tickets', {'departure':'1', 'arrival':'2'}, false);
  this.click('input[value="Rechercher"]');
  this.wait(1000, function() {
    this.echo(this.getCurrentUrl());
  });
});

casper.run(function(){
    this.exit();
});
文档中说fill使用value属性来匹配,但我想使用选项标记中的文本。例如:

<option value="Montpellier">Montpellier</option>
<option value="Montpellier">Béziers</option>
因此,如果我想选择贝齐尔,我必须写“出发”:“蒙彼利埃”。
有没有办法使用选项标记内的文本?

最简单的方法是检索要选择的选项的元素值,然后使用该值。在随后的选择过程中,可能会选择另一个选项,但该值将相同,因此不会产生差异:

var x = require('casper').selectXPath;
casper.start('http://www.leguichet.fr/', function() {

  var textToSelect = "Béziers";
  var value = this.getElementAttribute(x("//form[@id='search_tickets']//select[@name='departure']/option[contains(text(), '" + text + "')]"), 'value');

  this.fill('form#search_tickets', {'departure': value, 'arrival':'2'}, false);

  this.click('input[value="Rechercher"]');
  this.wait(1000, function() {
    this.echo(this.getCurrentUrl())
  });
});

通过使用text函数测试DOM节点的文本内容,可以轻松地使用XPath选择DOM节点。到达时也要做同样的事情。

谢谢你回答Artjom B。我试过了,但不起作用,即使将text改为select by text。如果我将this.echovalue添加到this.fill之前,它会显示该值为null。好的,我发现。。。缺少括号:[containstext,'+text+']