2016-03-31 76 views
0

當前正在學習如何使用geb編寫自動化測試的過程,因此這可能是一個noob觀察和問題。它只是我還是一個接一個地運行多個測試似乎可以加速測試的執行?例如,當寫一個新的測試時,我會註釋掉其他測試,只是運行一個或兩個方法來確保其正常工作。一切都會運行良好,並通過。然後,當我取消所有運行完整測試的註釋時,測試似乎運行得非常快,並且到了我自動化的Web應用程序無法跟上的地步,並且會導致我的測試由於未加載元素而失敗。即使使用waitFor{}塊。我發現在某些地方使用sleep(1000)已經有所幫助,但我覺得好像有更好的方法來解決這個問題。我正在使用的Web應用程序似乎每當用戶對字段進行任何操作時都會刷新頁面,這可能是我無法控制的問題的一部分。在我測試的一部分中,我需要填寫一個表單,但是在填寫輸入後刷新頁面,所以我編寫了下面的代碼,但是由於所有的睡眠語句,看起來有些差別。在geb自動測試中使用waitFor {}和sleep()的最佳做法是什麼?

void populateRequiredFields(){ 
    def fName = "Test" 
    def lName = "User" 
    def email = "[email protected]" 
    def question = "Do you even test bro?" 

    clear.click() 
    //sleep() to slow down test in order to get correct elements due to page refreshing 
    sleep(3000) 
    firstName << fName 
    sleep(1000) 
    lastName << lName 
    sleep(1000) 
    emailAddress << email 
    sleep(1000) 
    veryifyEmail << email 
    sleep(1000) 
    questionField << question 
    sleep(1000) 
} 

回答

0

使用sleep()不是一個好主意。嘗試使用waitFor {有些結果存在}

+0

因此經常使用waitFor {firstName.displayed}然後用firstName << fName填充字段? – WontonJon

1

我發現在page objectsmodules的方法內執行典型的異步操作之後,最好封裝等待頁面處於預期狀態的邏輯。通過這種方式,您不會將所有的噪音都浪費在測試中,並且在添加更多測試時您不會忘記等待,因爲等待是可重用邏輯的一部分。

你的情況

所以:

進口geb.Page

class APageThatCanBeCleared extends Page { 

    static content = { 
     clear { $(/*whatever the selector for the clearing element is*/) } 
     firstName { $(/*whatever the selector for the first name element is*/) } 
    } 

    void clear() { 
     clear.click() 
     waitFor { firstName.displayed } 
    } 
} 

,然後在您的測試:

to APageThatCanBeCleared 
clear() 
firstName << "Test" 
0

如果你需要等待的時間超過所提供的標準10秒時, waitFor,你可以這樣做:

waitFor(30, 0.5){ firstName << fName } 

這將等待30秒,並檢查每半秒。

相關問題