2015-06-15 54 views
0

我有一個Rselenium腳本來填寫form,但我試圖使用CasperJS,因爲我發現Rselenium太慢。以下代碼將按照我的預期導航窗體。CasperJS相當於RSelenium填寫表格

remote.driver$navigate("http://news.ceek.jp/search.cgi?kind=sports") 
search.form <- remote.driver$findElement(using = "xpath", "//*[@id='query']") 
search.form$sendKeysToElement(list("SearchTerm",key = "enter")) 

我試過的等效CasperJS代碼如下;

var casper = require("casper").create(); 
casper.start("http://news.ceek.jp/search.cgi?kind=sports", function() { 
    this.test.assertExists({ 
     type: 'xpath', 
     path: '//*[@id="query"]' 
    }, 'the element exists'); 
}); 

casper.then(function() { 
    this.fill('input[name="q"]', {q:'SearchTerm'}, true); 
}); 

從casper輸出;

PASS the element exists 
CasperError: Errors encountered while filling form: no field named "q" in form 

RSelenium的優點是表單參數不需要指定,但大概casperJS需要這個。我應該用什麼來代替?

我正在檢查元素,但無法在這種情況下識別表單參數。一般人如何去做這件事?

回答

1

casper.fill()的第一個參數是表格的選擇器。如果您沒有圍繞輸入元素的表單,則無法使用casper.fill*函數。

的解決方法是使用

casper.then(function() { 
    this.sendKeys('input[name="q"]', 'SearchTerm', {keepFocus: true}) 
    this.page.sendEvent("keypress", this.page.events.Enter); 
}); 

此外,您應該使用XPath助手:

var x = require('casper').selectXPath; 
... 
this.test.assertExists(x('//*[@id="query"]'), 'the element exists');