1

我正在使用TestNG和Selenium來執行並行測試。這在Firefox和Chrome中運行良好,但在IE中破解。我有執行該捲筒紙驅動器的步驟如下:TestNG和Selenium-IE無法啓動獨立線程

  1. 一個瀏覽器實例使用來自的testng.xml的參數(下文中找到)
  2. 可用的用戶是從測試用戶憑證
  3. 池中選擇創建
  4. 用戶登錄在
  5. 測試繼續進行

當IE啓動它的實例,它們都被分配了相同的用戶。此外,所有情況似乎都在爭奪哪一方關注。 (相反,在Firefox和Chrome中,所有實例都被適當地分配給自己的用戶,並且不會爭奪焦點)。

因爲每個IE實例使用相同的用戶憑證,所以我測試了衝突並且因爲它們爭奪哪個實例重點,我得到由於waitForElementPresent命令的Selenium TimeoutExceptions。

我的直覺是IE瀏覽器根本無法同時打開多個獨特的實例。任何人都可以證實我的懷疑,或指示我如何解決問題?感謝您的幫助!!

供參考,這是我的testng.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite thread-count="6" verbose="0" name="Command line suite" parallel="tests"> 

    <!-- IE Tests --> 
    <test name="SourceBoxUIIe" preserve-order="true"> 
     <parameter name="browser" value="ie"/> 
     <classes> 
      <class name="org.familysearch.links.uitests.SourceBoxUITest"/> 
     </classes> 
    </test> 
    <test name="EditPageIe" preserve-order="true"> 
     <parameter name="browser" value="ie"/> 
     <classes> 
      <class name="org.familysearch.links.uitests.EditPageUITest"/> 
     </classes> 
    </test> 
    <test name="LinksGadgetPageIe" preserve-order="true"> 
     <parameter name="browser" value="ie"/> 
     <classes> 
      <class name="org.familysearch.links.uitests.LinksGadgetPageUITest"/> 
     </classes> 
    </test> 
    <test name="AdminChangeLogIe" preserve-order="true"> 
     <parameter name="browser" value="ie"/> 
     <classes> 
      <class name="org.familysearch.links.uitests.AdminChangeLogPageUITest"/> 
     </classes> 
    </test> 
    <test name="AttachedToPageIe" preserve-order="true"> 
     <parameter name="browser" value="ie"/> 
     <classes> 
      <class name="org.familysearch.links.uitests.AttachedToPageUITest"/> 
     </classes> 
    </test> 
    <test name="ChangeLogIe" preserve-order="true"> 
     <parameter name="browser" value="ie"/> 
     <classes> 
      <class name="org.familysearch.links.uitests.ChangeLogUITest"/> 
     </classes> 
    </test> 

    <!-- Firefox Tests Would Be here --> 
    <!-- Chrome Tests Would Be Here--> 

    <!-- Command line test --> 
</suite> <!-- Command line suite --> 
+0

你是否使用xpath作爲大部分選擇器?當涉及到xpath選擇器的速度時,IE似乎遇到了很多問題。這就是爲什麼我完全遷移到CSS – sircapsalot

+0

謝謝你的迴應。我們儘可能使用id和class標籤。可以使用xpath阻止IE同時登錄會話嗎? – jpodwys

+0

我遇到的很多問題始終是速度和定位器。有時它找不到具有「用戶名」標識的輸入,有時它不能......這非常有趣。從來沒有一個同時登錄本身的問題。 – sircapsalot

回答

2

你的預感是正確的差不多。每wiki:InternetExplorerDriver

隨着創建IEDriverServer.exe的

多個實例,應該能夠創建和使用InternetExplorerDriver的多個同時實例。 但是,此功能在很大程度上未經測試,並且可能存在Cookie,窗口焦點等問題。如果您嘗試使用IE驅動程序的多個實例並遇到此類問題,請考慮使用RemoteWebDriver和虛擬機。

有兩種解決方案可以解決InternetExplorer多個實例之間共享的Cookie(以及另一個會話項目)問題。

首先是以私人模式啓動InternetExplorer。之後,InternetExplorer將以乾淨的會話數據啓動,並且不會在退出時保存更改的會話數據。爲此,您需要將2個特定功能傳遞給驅動程序:ie.forceCreateProcessApi具有true值,ie.browserCommandLineSwitches具有-private值。請注意,它僅適用於InternetExplorer 8和更新版本,而Windows註冊表HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Main路徑應該包含帶有0值的TabProcGrowth關鍵字。

第二個是在InternetExplorer啓動期間清理會話。爲此,您需要將具有真實值的特定ie.ensureCleanSession功能傳遞給驅動程序。這會清除InternetExplorer所有正在運行的實例的緩存,包括那些手動啓動的實例。

+0

感謝您提供非常具體的提示。我們的開發服務器目前正在進行一些維護工作,但當他們重新上線並重新評估結果時,我絕對會嘗試這種方式。 – jpodwys

+0

謝謝你的幫助!我花了很多時間研究這個問題,你的回答正是我需要的。 – jpodwys

+0

我試圖完全實現你的建議,但無法啓用'ie.forceCreateProcessApi'和'ie.browserCommandLineSwitches'。嘗試了一下之後,我改用了'setCapability(InternetExplorerDriver.FORCE_CREATE_PROCESS,true)'和'setCapability(InternetExplorerDriver.IE_SWITCHES,「-private」)''。這些都是一樣的嗎? – jpodwys