我尝试过捕获表单,但是说“找不到表单”。
我做了以下
this.test.assertExists('//*[@id="#loginForm"]', 'form is found');
this.fill('', {
login:"**********",
password:"**********",
}, true);
我的html代码在
之下<form id="#loginForm" class="form-signin" role="form" method="POST" action="/login">
我也试过“form ## loginForm”,但我总是看到“找不到表单”。
答案 0 :(得分:0)
'//*[@id="#loginForm"]'
是一个XPath表达式。几乎所有CasperJS函数都支持XPath表达式,但您需要使用辅助函数来区分XPath表达式和CSS选择器:
var x = require("casper").selectXPath;
...
this.test.assertExists(x('//*[@id="#loginForm"]'), 'form is found (xpath)');
this.test.assertExists('[id="#loginForm"]', 'form is found (css)');
其他问题可能是:
casper.withFrame()
切换到框架。resource.error
,page.error
,remote.message
和casper.page.onResourceTimeout
事件(Example)。casper.capture()
),看看您是否在正确的页面上或者页面是否已满载。如果不是,那么您需要调查可能的原因以及之前的步骤失败。也许你只需要等待一段时间。 如果表单是异步加载的,则需要等待它显示如下:
var formSelector = x('//*[@id="#loginForm"]');
casper.waitForSelector(formSelector, function _then(){
this.fill(formSelector, {
login: "**********",
password: "**********",
}, true);
}, function _onTimeout(){
this.test.fail("Login form loaded");
} /* , 5000 */); // timeout is 5 seconds by default