2014-10-17 50 views
1

上下文: 目前我正在使用基於Selenium的Java系統,該系統使用JUnit和Maven運行測試。通過Maven Surefire插件,我可以並行運行測試。我已確保以下幾點 -當並行運行Selenium測試時發生TimeoutException

  • ThreadLocal的用於單一對象
  • 每個線程獨立的webdriver
  • 使用明確的等待(例如,(new WebDriverWait(webdriver, timeout)).until(ExpectedConditions.________(_____));

問題: 然而,當並行運行測試,我在WebDriverWait顯式等待時收到TimeoutExceptions。這可以發生在測試中使用顯式等待的任何地方。當測試順序運行時,這些超時異常不會發生。

問題: 我想知道你們中的任何人是否遇到過這種情況,以及你們如何解決這個問題。其他相關信息和反饋也受到歡迎。

在此先感謝!如果您需要任何補充資源,例如示例代碼,我很樂意提供。

回答

1

首先我不確定如何正確使用多線程JUnit,上次我試過我沒有成功,無論如何,我用TestNG得到了更好的結果。除此之外,事情與你的相似,基本上來自maven(surefire),我打電話給testng.xml,reference

現在,開箱即用的webdriver是而不是線程安全。線程可能會混淆,所有類型的「幾乎不可能調試」都會發生。無論如何,最近WebDriver人已經試圖解決這個問題,我們現在有ThreadGuard類可用(source)。根據文檔:

多線程客戶端代碼應該使用它來斷言它以線程安全的方式訪問 webdriver。

所以你的情況,你可以簡單地使用它喜歡(從我的頭頂,對不起錯別字):

ThreadLocal<WebDriver> driverStore = new ThreadLocal<>(); 
WebDriver driver = ThreadGuard.protect(new FirefoxDriver()); 
driverStore.set(driver); 

我一直在使用這種設置了成功。

相關問題