CasperJS 相当于 RSelenium 用于填写表格
CasperJS equivalent to RSelenium for filling a form
我有一个 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 的优点是不需要指定表单参数,但大概是 casperJS 需要这个。我应该改用什么?
我正在检查元素,但在这种情况下无法识别表单参数。一般情况下,人们是如何处理这件事的?
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');
我有一个 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 的优点是不需要指定表单参数,但大概是 casperJS 需要这个。我应该改用什么?
我正在检查元素,但在这种情况下无法识别表单参数。一般情况下,人们是如何处理这件事的?
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');