目标
这里我试图在上面进行基本的搜索导航
Pubmed website。让我们说我要搜索的术语是Hello
。我最终期望的是在点击搜索按钮后登陆结果页面。
问题
提交代码在Chrome浏览器的javascript控制台上完美运行。但它不适用于casperjs。 current-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();
});*/
});
答案 0 :(得分:1)
在我提交表单或请求新的uri后,ALWAYS
使用其中一个waitFor作为选择器。我有时会注意到仅使用.then
会失败。
这传递正常(我也注意到你的网址匹配略有错误)
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);
});