CasperJS相当于RSelenium用于填写表格

时间:2015-06-15 10:55:49

标签: casperjs rselenium

我有一个Rselenium脚本来填写form,但我正在尝试使用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的优点是不需要指定form参数,但可能casperJS需要这样做。我该怎么用呢?

我正在检查元素,但在这种情况下无法识别表单参数。一般来说,这是怎么回事?

1 个答案:

答案 0 :(得分: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');