2012-09-17 55 views
3

當IE使用onclick.window.open()打開第二個瀏覽器窗口時,我需要在第二個窗口上執行一些處理,然後關閉窗口。C#WebDriver與SwitchTo()與IE的問題

我曾嘗試在計算器關於窗口發現以下recomendations處理:

string popupHandle = string.Empty; 
    ReadOnlyCollection<string> windowHandles = selObj.Driver.WindowHandles; 
    foreach (string handle in windowHandles) 
    { 
     if (handle != originalHandle) 
     { 
      popupHandle = handle; 
      break; 
     } 
    } 

    selObj.Driver.SwitchTo().Window((popupHandle)); 

    selObj.Driver.Close(); 

    selObj.Driver.SwitchTo().Window(originalHandle); 

之前,我執行此代碼我嘗試點擊新窗口的控制來改變焦點。

的webdriver無法找到控制(我也嘗試使用WebDriverWait類等待第二次瀏覽完全負載。

WebDriverWait也在等待秒後會拋出異常。

在試圖執行的:

selObj.Driver.SwitchTo().Window((popupHandle)); 

我收到以下異常:

No response from server for url http:// 

我知道這是C#和IE,想知道是否有人爲此找到了解決辦法?

感謝

回答

0

我三人C#+ +的webdriver即正常工作。

是的 - IE必須重點關注。 請嘗試我的代碼。代碼適用於IE,Chrome和Firefox

protected void SwitchToWindow(string name) 
    { 
     foreach (string item in _driver.WindowHandles) 
     { 
      if (_driver.SwitchTo().Window(item).Title.Contains(name)) 
      { 
       _driver.SwitchTo().Window(item); 
       break; 
      } 
     } 
    } 

其中_driver是selObj.Driver的情況。

0

來得有點晚,但可以有效:

var ieOptions = new InternetExplorerOptions 
       { 
        IntroduceInstabilityByIgnoringProtectedModeSettings = true 
       }; 

       ieOptions.ForceCreateProcessApi = true; 
       ieOptions.BrowserCommandLineArguments = "-private"; 
       driver = new InternetExplorerDriver(IE_DRIVER_PATH, ieOptions); 

你必須要在真正的設置ForceCreateProcessApi。它只與IE瀏覽器,你必須設置這種類型的選項。

如果程序拋出其他錯誤,如:

「的時候,下面的註冊表項設置爲0,則會出現此問題: HKEY_CURRENT_USER \軟件\微軟\的Internet Explorer \ MAIN \ TabProcGrowth」

您將不得不在註冊表中創建一個密鑰(使用註冊表)並將此密鑰 設置爲0(類型:REG_DWORD和值類型:十進制)。