Zombie.js按钮无法启用

时间:2013-07-09 13:25:26

标签: html testing zombie.js

目前我正在尝试使用zombie.js为我的网站运行自动化测试。现在我正在努力使一个人注册自动化。对于注册,表单使用3个不同的div,看起来像这样

页码:

<form>
   <div id=step1>
   <div id=step2>
   <div id=step3> 
</form> 
...
...
<button id="nextStep" class="btn btn-primary" role="button" 
   onClick="signupNext()">Cnt. </button>

SignupNext是一个javascript函数,它禁用按钮然后一些简单的事情 然后重新启用按钮。

Zombie Code:

browser
   .visit(https://example.com, function(){
     browser.fill(....)
     browser.fill(....)
     browser.pressButton('#nextStep', function(){
        browser.fill(...)
        browser.fill(...)
        browser.pressButton('#nextStep', function(){ //THIS LINE Errors
            ...
            ...
        });
     });
   })

Zombie在第二个.pressButton上抛出错误“Button is disabled”。就我对zombiejs的理解而言,在我看来,pressButton应该等待事件完成然后执行回调函数。

* zombiejs的新手

2 个答案:

答案 0 :(得分:1)

Everythings异步发生 来自文档:

  
    

浏览器将加载文档,如果文档包含任何脚本,也会加载并执行这些脚本。然后它会处理     一些事件,例如,脚本在页面加载时执行的任何操作。所有     就像真正的浏览器一样,异步发生。

  
     

要等待页面完全加载和处理事件,请通过访问   回调函数。然后Zombie会用null调用你的回调,   浏览器对象,最后一个响应的状态代码和一个数组   错误(希望是空的)。这是JavaScript,所以你不需要   声明所有这些参数,实际上可以访问它们   browser.statusCode和browser.errors。

     

(为什么第一个回调参数为null?它的效果很好   使用像Mocha这样的异步测试框架

     

Zombie也支持承诺。当您调用visit等功能时,   等待或点击链接没有回调,你得到一个承诺。之后   浏览器完成处理,它要么履行要么拒绝承诺。

例如:

browser.visit("http://localhost:3000/").
  then(function() {
    assert.equal(browser.text("H1"), "Deferred zombies");
  }).
  fail(function(error) {
    console.log("Oops", error);
  });

答案 1 :(得分:1)

这可能是由于您检查输入以启用/禁用此按钮的方式。 我猜你可能正在使用 keyup blur 或两个事件。 当僵尸为你填充这些输入时,它不会因为触发这些事件而烦恼,因为当真正的用户使用实际的浏览器填充它时,你必须使用僵尸来触发你需要的任何事件,就在输入之后填满,像这样:

browser.fill(...);
browser.fill(...);
browser.fire("{checkedInputSelector}", "keyup", function(){
    browser.pressButton('#nextStep', function(){ //THIS LINE shouldn't error anymore
        ...
        ...
    });
});