CasperJS эквивалентен RSelenium для заполнения формы

У меня есть скрипт 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 в том, что параметр form не нужно указывать, но предположительно это требует casperJS. Что я должен использовать вместо этого?

Я проверяю элементы, но в таком случае у меня возникают проблемы с определением параметра формы. Как к этому вообще относятся?


person JSB    schedule 15.06.2015    source источник


Ответы (1)


Первый аргумент casper.fill() — это селектор формы form. Если у вас нет формы, окружающей элемент ввода, вы не можете использовать функции 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');
person Artjom B.    schedule 15.06.2015