CasperJS:找不到登录表单

时间:2015-09-21 02:10:17

标签: javascript casperjs

我尝试过捕获表单,但是说“找不到表单”。

我做了以下

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”,但我总是看到“找不到表单”。

1 个答案:

答案 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.errorpage.errorremote.messagecasper.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