CasperJS表格未在AngularJS中提交

时间:2015-02-01 10:05:49

标签: javascript angularjs css-selectors casperjs

我将使用CasperJS进行测试,表单提交和UI测试,我是CasperJS和AngularJS的新手。在使用CasperJS进行测试时,我的表单没有提交,但它会出错,即找不到表单。

这是我的表单

<form role="form" name="login-form">
    <div class="list list-inset col-sm-6 well col-md-offset-3 shadowBox">
         <label class="item item-input item-stacked-label ">
          <span class="input-label">Email</span>
         </label>
        <div class="item item-input item-stacked-label">
          <input class="form-control" name="emailId" type="email" ng-model="loginData.email" placeholder="Email" required>
        </div>
        <label class="item item-input item-stacked-label">
          <span class="input-label">Password</span>
        </label>
        <div class="item item-input item-stacked-label">
          <input class="form-control" name="passwordId" type="password" ng-model="loginData.password" placeholder="Password" required>
        </div>
        <div class="message-box  alert-danger text-center" role="alert" ng-hide="!message.length">
              <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
              <span class="sr-only">Error:</span>
              <span data-ng-bind="message"></span>
         </div>
         <div class="item" ng-show="{{applicationType}}">
              <hr/>
              <button class="button button-positive pull-right btn btn-primary"   ng-click="doLogin(loginData)" id="success">Log in</button>
              <a ng-click="goToForgotPassword()" class="button button-clear button-positive">Forgot password?</a>
        </div>
        <div style="clear:both;"></div>
        <label class="item" ng-hide="{{applicationType}}">
            <button class="button button-positive"   ng-click="doLogin(loginData)" id="success">Log in</button>
             <a ng-click="goToForgotPassword()" class="button button-clear button-positive">Forgot password?</a></div>
        </label>
    </div>
</form>

这是我的CasperJS代码

casper.start('http://localhost:3000/#/login', function() {
    this.fillSelectors('form#login-form', {
        'emailId':    'test@gmail.com',
        'passwordId':    'test123'
    }, false);
});

casper.then(function() {
    this.evaluateOrDie(function() {
        return /message sent/.test(document.body.innerText);
    }, 'sending message failed');
});

casper.run(function() {
    this.echo(this.getHTML());
    this.echo('message sent').exit();
});

1 个答案:

答案 0 :(得分:1)

你的选择器错了。你的意思是使用form[name="login-form"]。您的初始选择器实际上等于form[id="login-form"],因为#是ID选择器。

请注意,您使用fillSelectors函数,因此您需要使用实际选择器来查找字段。

由于这是angularjs,您可能还需要等待表单出现。

完整代码:

casper.start('http://localhost:3000/#/login');

casper.waitForSelector('form[name="login-form"] input[name="emailId"]', function() {
    this.fillSelectors('form[name="login-form"]', {
        'input[name="emailId"]':    'test@gmail.com',
        'input[name="passwordId"]':    'test123'
    }, false);
});

casper.run(function() {
    this.echo(this.getHTML());
    this.echo('message sent').exit();
});

另请注意,包含evaluateOrDie的步骤不会执行任何有用的操作。您没有使用传递给页面上下文的参数,也不会使用从页面上下文返回的值。