2015-04-21 32 views
0

中的文本,我想填補這個網站的「Acheter聯合國坯」形式填寫表格的選擇框:http://www.leguichet.fr/使用<option>標籤與CasperJS

這是我到目前爲止已經完成:

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> 

因此,如果我要選擇貝濟耶我必須寫「出發」:「蒙彼利埃」。 有沒有辦法使用選項標籤內的文字?

回答

0

最簡單的方法是檢索要選擇的選項的元素值,並稍後使用該值。可能的情況是,隨後的選擇過程中的另一個選項被選中,但價值是一樣的,所以應該有所作爲:

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()) 
    }); 
}); 

您可以輕鬆地選擇DOM通過測試使用XPath節點他們的文字內容與text()功能。對arrival做同樣的事情。

+0

感謝您回答Artjom B. 我試過了,但它並沒有工作,即使在更改textToSelect文本之後。 如果我在this.fill之前添加this.echo(value),它表示該值爲null。 – Keho

+0

好的,我發現了......缺少括號:[contains(text(),'「+ text +」')] – Keho