使用 waitFor 指令

許多網站使用前端 JavaScript 技術強化網頁瀏覽效果,特別是使用 AJAX 技術或 SPA(Single-page application)架構的網站,在進行自動化測試時,需要先等待網頁的背景動作完成。例如點選送出指令後,透過 AJAX 更新某些內容,Geb 提供 waitFor 指令方便此類型的測試需求。

以 Google reCAPTCHA 的 AJAX Demo 為例,按下「Click Me」按鈕後,會利用 AJAX 載入 Captcha (圖片驗證碼)的區塊,我們可以利用 waitFor 指令等待 JavaScript 建立此區塊的 DOM 之後,再抓取驗證圖片的來源位址。

Browser.drive {
    go 'https://www.google.com/recaptcha/demo/ajax'

    $('input', value: 'Click Me').click()

    waitFor {
        $('#recaptcha_area').size() > 0
    }

    println $('#recaptcha_challenge_image').attr('src')
}

waitFor 的區塊中使用條件判斷式,執行程序會一直等待判斷結果成立才繼續。

  • $("div#result").text() == "Successful"
  • $("img.thumbnail").size() >= 20

如果想改變 waitFor 等待的時間長度,以及每次測試判斷條件是否成立的時間間隔,可以利用傳入的參數改變預設值。

語法

範例 說明
waitFor {} 預設的等待時間
waitFor(10) {} 最長等待時間為 10 秒
waitFor(10, 0.5) {} 最長等待時間為 10 秒,每次判斷條件的間隔時間為 0.5 秒
waitFor("quick") {} 依照自定的等待時間

results matching ""

    No results matching ""