目前我正在尝试使用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的新手
答案 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
...
...
});
});