2015-06-15 2 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); 
}); 

Выход из камеры;

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'); 
Смежные вопросы