2014-02-28 69 views
5

我注意到一些Geb功能測試通過Chrome,但與PhantomJS失敗,保持所有其他變量不變。這主要發生在具有某種異步活動的頁面上 - 一個對$(selector).click()的調用會觸發一個更新DOM的事件處理程序,並且在調用$(anotherSelector).click()之前需要完成DOM更新。Geb測試通過Chrome瀏覽器,失敗PhantomJS

我可以通過積極使用waitFor再次通過PhantomJS測試,但我不明白爲什麼使用PhantomJS GhostDriver而不是Chrome驅動程序需要這樣做。

不幸的是,我一直沒有能夠構建一個最小的測試案例,但與我的應用程序隔離。

回答

2

我能得到的唯一的建議是要始終確保在您的測試周圍的異步活動的任何行動守衛與waitFor聲明。在測試嘗試訪問頁面中新的/修改過的元素之前,您將避免一個驅動程序足夠快以完成異步活動的問題,但另一個不是。在異步活動周圍不使用waitFor也會在開始在CI上運行測試時遇到困難,通常它們會比較慢,並且您會在測試頁面中看到與異步性相關的更多故障。

我也不會考慮使用waitFor來保護測試中的每個異步活動都是積極的。你必須記住,waitFor定期輪詢條件,並在條件滿足時繼續進行 - 所以如果你的瀏覽器很快並且頁面在waitFor第一次輪詢之前得到更新,那麼你根本不會受到速度上的懲罰,但是如果不是,那麼你有一個保證,會有一個重試,看看異步行動是否已經完成,條件是否滿足。我發現有些挑釁性的做法是使用像30秒這樣荒謬可笑的高時間停頓,而這些時間絕對不是必需的 - 它只是意味着如果你的測試失敗了,它將需要很長時間才能發生。

+0

謝謝@erdi。這就是我所知道的。 waitFor()不是一種睡眠類型的函數。 –

+0

我不明白的是爲什麼waitFor *不需要在Chrome中通過測試。 – wrschneider

0

即使使用IE和Firefox,我也有最近的體驗​​。這是你可以嘗試列表:

  1. 當然,WAITFOR {} /(超時:)是你的朋友
  2. 我敢肯定,Chrome和PhantomJS的行爲不完全一樣。因此,嘗試手動並觀察有什麼區別,然後用這樣的:

    if(System.properties["geb.env"]=="chrome") { $(selector).click() } else { // Do something else }

+0

我在問什麼*爲什麼我需要在PhantomJS中使用waitFor而不是Chrome。 – wrschneider

+0

爲什麼?這是一個有趣的事情要知道!我想geb的提交者會是最好的人知道!例如,Chrome在Geb中的工作速度比Firefox快,Firefox需要比Chrome更多的waitFor,但是很高興看到所有瀏覽器的行爲是否相似! –

相關問題