2012-09-17 54 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和值类型:十进制)。