事實上,就我個人這幾天試用Headless browsers下來的體驗,我深深覺得其實Headless browser在功能上來講似乎仍明顯不及要打開頁面來運作的browser,只要test case寫的operation模式不好,就會遇到許多奇奇怪怪的問題,像是頁面元素頁面點不到、Browser開半天開不起來最後經過6分鐘後自己timeout、截圖畫面不清等等問題。

  其中Chrome/FireFox/PhantomJS 三大Headless Browsers中又以Chrome問題最多,換言之最不穩定,但效能上若未經選項調整,PhantomJS執行速度最慢,幾乎跟要開頁面運作的browser一樣,這樣就享受不到Headless的極速快感了。

  三種Browsers中就屬Firefox最為穩定,果然Selenium最終仍然最鍾情於火狐先生,但仍然有一點點小問題,像昨天就遇到Web Driver Exception: Connection Refused.

  這個Exception是發生在跑Test Suite時,Test Case常常莫明其妙停住在某一個等好久好久,等到我洗完澡回來還在等,不知道在等什麼,最後就吐出一個Exception訊息:WebDriverException: Message: connection refused ,然後才繼續下一個test case,但這已經浪費掉5-10分鐘了,這實在是很冏。

  於是乎上網查了一下,有人說:connection is refused here means that Selenium is unable to establish the connecting which you wanted to establish,就是建不起來web driverconnection就是了,導致web browser遲遲不開起來。這問題很嚴重,因為若是跑大量test case不能保證browser都能穩穩被打開的話,就無法成功有效的自動化測試,這問題非解決不可!

  再稍稍Survey一下,發現這Exception的發生跟下列情形有關:

就是Race Around Condition,亦即每個test case開啟geckodriver instance時彼此在搶資源,搶不到就讓你癡癡的等的意思,然後稍微說明一下可能原因,這情況並非只有headless browsers有,但我覺得在headless中發生的次數與狀況卻較為嚴重。

  有兩種解決方式:一是從test case寫法做改善,在每個test case結束時一定要Close All Browsers,以釋放掉web browser resource,讓下一個test caseweb driver使用。另外一個是確認Selenium + Web driver + Web Browsers的版本是最適匹配,如果Selenium是最新的,web driverweb browser版本也必須使用最新可支援selenium的版本才行。

 

[Reference]    https://stackoverflow.com/questions/47920639/how-to-fix-webdriverexception-message-connection-refused?noredirect=1&lq=1

 

  201898日星期六

arrow
arrow

    jackterrylau 發表在 痞客邦 留言(0) 人氣()