2015-06-25 122 views
0

剛開始上casperJs和發現的waitForSelector(「...」,功能成功()/功能失效()目的是什麼?

waitForSelector("....", function success() { 

}, 
function fail() { 

}); 

我的問題是選擇,什麼是這種的差異,使用if/else語句來獲得成功的代碼和錯誤?是否有一個優於另一個?我在網上搜索,並且在這裏,並且一直未能找到任何明確的。

+0

你的意思是,差異到一個單一的回調函數,使用'if'語句的參數條件? – Bergi

回答

1
waitForSelector(String selector, Function then, Function onTimeout, Number timeout) 

是一個異步階躍函數,這就是爲什麼它不只要選擇找到返回,但它會立即返回casper對象,因爲CasperJS支持流暢的API。您根本無法使用if-else來檢查等待的成功或失敗。

waitForSelector()的呼叫安排了一個等待步驟。此預定步驟可以通過以下三種方式之一結束:

  • 選擇器被找到:then函數作爲單獨的步驟執行(如果它已通過)。否則,執行下一個預定步驟。
  • 在等待時間(超時)期間未找到選擇器:如果傳遞了onTimeout函數,則此函數作爲捕獲onTimeout錯誤的單獨步驟執行。如果沒有通過,並且沒有全局onTimeout處理程序,則會拋出一個CasperError,它將退出腳本。
  • 還有一些其他錯誤不會被thenonTimeout發現並且腳本退出。

所以,如果你的名字是那些你在successfail傳遞功能,你應該知道,這種命名僅僅是相對於超時功能正確。

+0

關於waitForSelector函數的很好解釋。爲了深入探討我的問題,檢查錯誤的首選方法是什麼? casper.then(function() { if(something) test.pass("Pass"); else test.fail("Fail"); }); 或者waitForSelector函數與successfail傳入? – Billy

+0

它們不可互換。如果你有同步代碼,那麼你可以使用'if'。如果您需要等待選擇器(異步),那麼您需要使用'waitForSelector()'。您不需要傳入任何回調,因爲如果未找到選擇器,CasperJS會自動退出腳本。 –

0

waitForSelector是一個異步函數,它沒有立即返回的值,這就是爲什麼它在回調函數中返回的原因:waitForSelector可以拋出異常鏈或可能意外失敗並拋出異常。在這種情況下,錯誤回調功能fail()將被調用,那就是你可以正常處理錯誤的地方。如果/ else是對確定性值進行操作的同步行爲。

+0

'失敗'不處理任意JavaScript錯誤。它*僅*處理超時。而且,'waitForSelector()'確實會返回一些東西。這是「casper」對象,以便鏈接進一步的步驟。 –