2013-07-09 41 views
1

目前我正在嘗試使用zombie.js爲我的網站運行自動化測試。現在我正在努力讓一個人自動註冊。對於註冊表單使用3周不同的div看起來像這樣Zombie.js Button not enabled

頁代碼:

<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函數,它禁用按鈕,然後一些簡單的事情 後重新啓用按鈕。

殭屍代碼:

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 
      ... 
      ... 
     }); 
    }); 
    }) 

殭屍引發錯誤 「按鈕被禁用」 第二.pressButton。就我對zombiejs的理解而言,在我看來,pressButton應該等待事件完成,然後執行回調函數。

*新zombiejs

回答

1

萬物同步發生從技術文檔

瀏覽器將加載該文件,如果文件包含的任何腳本,也加載和執行這些腳本。然後它會處理 某些事件,例如,腳本在頁面加載時執行的任何操作。所有的 ,就像一個真正的瀏覽器,異步發生。

等待頁面完全加載和處理事件,你通過參觀 一個回調函數。然後,殭屍將會以null, 瀏覽器對象,最後一個響應的狀態代碼以及錯誤(希望爲空)的數組 來呼叫您的回調。這是JavaScript,因此您不需要 聲明所有這些參數,並且實際上可以將它們作爲 browser.statusCode和browser.errors進行訪問。

(爲什麼會第一個回調參數爲空?它使用異步測試框架,如摩卡

的偉大工程時

殭屍也支持的承諾。當你調用像訪問, 等待或clickLink功能,而不回調,你得到承諾的 瀏覽器完成處理後,它要麼履行或拒絕承諾

例如:。

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

使用promises API Zombie提供的結果與使用回調的事件完全相同,但使用更簡潔的語法。這不應該改變目前打破的任何事情。 –

1

這可能是由於您檢查輸入以啓用/禁用此按鈕的方式。 我猜你可能使用鍵盤,模糊或這兩個事件。 當殭屍爲你填充這些輸入時,它不會打擾這些事件,因爲當真正的用戶使用真正的瀏覽器填充它時,你必須使用殭屍來觸發你需要的任何事件,就在輸入之後如下所示:

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