使用 casperjs 提交表单 - 新 url 未加载
form submit with casperjs - new url doesn't load
目标
在这里,我试图在
Pubmed website。假设我要搜索的词是 Hello
。最后我期望的是在单击搜索按钮后进入结果页面。
问题
提交代码在 chrome 浏览器的 javascript 控制台上运行完美。但它不适用于 casperjs。当前-url 似乎保持不变。我无法弄清楚问题出在哪里。
我的代码
// USAGE: casperjs test navigation_test.js
var config = {
url: 'https://www.ncbi.nlm.nih.gov/pubmed/',
};
config.form = {
"term": "Hello",
};
casper.test.begin('Testing navigation and forms', 2, function suite(test) {
test.comment('⌚ Loading ' + config.url + '...');
casper.start(config.url, function() {
// adjust the view port
this.viewport(1280, 1024);
});
// #1 method-2 (short)
casper.then(function() {
this.fill('form#EntrezForm', config.form, true);
})
// #2
casper.then(function() {
test.assertUrlMatch(/term/, 'New location is ' + this.getCurrentUrl());
});
casper.run(function () {
test.done();
});
});
额外代码
上面代码中的#1 method
比较短。我还尝试了如下更长的版本。但是也没用。
// #1 method-1 (long)
casper.then(function() {
this.evaluate(function() {
$('term').value = "Hello"
});
test.assertEvalEquals(function () {
return $('term').value;
}, "Hello", 'The search was filled out properly.');
this.click('button[id="search"][type="submit"][class="button_search nowrap"]');
// OR
// this.clickLabel('Search', 'button');
// OR
/*this.evaluate(function() {
$('search').click();
// OR
// document.getElementById('search').click();
});*/
});
在我提交表单或请求新的 uri 后,我 ALWAYS
使用 waitFor 之一作为选择器。我有时注意到仅使用 .then
有时会失败。
这很好(我也注意到你的 url 匹配有点错误)
var config = {
url: 'https://www.ncbi.nlm.nih.gov/pubmed/',
};
config.form = {
"term": "Hello",
};
casper.test.begin('Testing navigation and forms', 2, function suite(test) {
casper.start(config.url, function () {
this.viewport(1280, 1024);
});
casper.then(function () {
test.assertTitle("Home - PubMed - NCBI", "Title is Home - PubMed - NCBI");
this.fill('form#EntrezForm', config.form, true);
});
//Changes made here!
casper.waitForText("Search results", function () {
test.assertUrlMatch(/pubmed\/\?term=Hello/,
'New location is ' + this.getCurrentUrl());
});
casper.run(function () {
test.done();
});
});
更新试试这个
添加失败条件并抓取屏幕以查看发生了什么(或没有发生什么)
casper.waitForText("Search results", function () {
test.assertUrlMatch(/pubmed\/\?term=Hello/,
'New location is ' + this.getCurrentUrl());
}, function() {
casper.capture("grab.png");
});
您还可以在 casper.test
行
的正下方添加用户代理字符串
casper.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X)');
您也可以尝试增加超时时间,使其超过 5 秒,例如
casper.waitForText("Search results", function () {
test.assertUrlMatch(/pubmed\/\?term=Hello/,
'New location is ' + this.getCurrentUrl());
}, null, 10000);
更新也试试这个 - 远景!
尝试用这个代码替换。填写表格的同时提交...
casper.then(function () {
test.assertTitle("Home - PubMed - NCBI", "Title is Home - PubMed - NCBI");
this.fillSelectors('form', {
"input[id='term']": "Hello"
}, true);
});
目标
在这里,我试图在
Pubmed website。假设我要搜索的词是 Hello
。最后我期望的是在单击搜索按钮后进入结果页面。
问题
提交代码在 chrome 浏览器的 javascript 控制台上运行完美。但它不适用于 casperjs。当前-url 似乎保持不变。我无法弄清楚问题出在哪里。
我的代码
// USAGE: casperjs test navigation_test.js
var config = {
url: 'https://www.ncbi.nlm.nih.gov/pubmed/',
};
config.form = {
"term": "Hello",
};
casper.test.begin('Testing navigation and forms', 2, function suite(test) {
test.comment('⌚ Loading ' + config.url + '...');
casper.start(config.url, function() {
// adjust the view port
this.viewport(1280, 1024);
});
// #1 method-2 (short)
casper.then(function() {
this.fill('form#EntrezForm', config.form, true);
})
// #2
casper.then(function() {
test.assertUrlMatch(/term/, 'New location is ' + this.getCurrentUrl());
});
casper.run(function () {
test.done();
});
});
额外代码
上面代码中的#1 method
比较短。我还尝试了如下更长的版本。但是也没用。
// #1 method-1 (long)
casper.then(function() {
this.evaluate(function() {
$('term').value = "Hello"
});
test.assertEvalEquals(function () {
return $('term').value;
}, "Hello", 'The search was filled out properly.');
this.click('button[id="search"][type="submit"][class="button_search nowrap"]');
// OR
// this.clickLabel('Search', 'button');
// OR
/*this.evaluate(function() {
$('search').click();
// OR
// document.getElementById('search').click();
});*/
});
在我提交表单或请求新的 uri 后,我 ALWAYS
使用 waitFor 之一作为选择器。我有时注意到仅使用 .then
有时会失败。
这很好(我也注意到你的 url 匹配有点错误)
var config = {
url: 'https://www.ncbi.nlm.nih.gov/pubmed/',
};
config.form = {
"term": "Hello",
};
casper.test.begin('Testing navigation and forms', 2, function suite(test) {
casper.start(config.url, function () {
this.viewport(1280, 1024);
});
casper.then(function () {
test.assertTitle("Home - PubMed - NCBI", "Title is Home - PubMed - NCBI");
this.fill('form#EntrezForm', config.form, true);
});
//Changes made here!
casper.waitForText("Search results", function () {
test.assertUrlMatch(/pubmed\/\?term=Hello/,
'New location is ' + this.getCurrentUrl());
});
casper.run(function () {
test.done();
});
});
更新试试这个
添加失败条件并抓取屏幕以查看发生了什么(或没有发生什么)
casper.waitForText("Search results", function () {
test.assertUrlMatch(/pubmed\/\?term=Hello/,
'New location is ' + this.getCurrentUrl());
}, function() {
casper.capture("grab.png");
});
您还可以在 casper.test
行
casper.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X)');
您也可以尝试增加超时时间,使其超过 5 秒,例如
casper.waitForText("Search results", function () {
test.assertUrlMatch(/pubmed\/\?term=Hello/,
'New location is ' + this.getCurrentUrl());
}, null, 10000);
更新也试试这个 - 远景!
尝试用这个代码替换。填写表格的同时提交...
casper.then(function () {
test.assertTitle("Home - PubMed - NCBI", "Title is Home - PubMed - NCBI");
this.fillSelectors('form', {
"input[id='term']": "Hello"
}, true);
});