使用IE的SwitchTo()的C#WebDriver问题

时间:2012-09-17 18:34:20

标签: c# internet-explorer webdriver selenium-webdriver

当IE使用onclick.window.open()打开第二个浏览器窗口时,我需要在第二个窗口上进行一些处理,然后关闭窗口。

我已尝试在stackoverflow上找到有关窗口句柄的以下建议:

 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,想知道是否有人为此找到了解决方法?

由于

2 个答案:

答案 0 :(得分:0)

我的三重奏C#+ WebDriver + Ie工作正常。

是的 - 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。

答案 1 :(得分:0)

有点晚但可以有效:

var ieOptions = new InternetExplorerOptions
                {
                    IntroduceInstabilityByIgnoringProtectedModeSettings = true
                };

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

您必须将ForceCreateProcessApi设置为true。只有IE才能设置这种选项。

如果该程序抛出了另一个错误,如:

“当以下注册表项设置为0时,会出现此问题: HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Main \ TabProcGrowth“

您必须在注册表中创建一个密钥(使用regedit)并设置此密钥 为0(类型:REG_DWORD和值类型:十进制)。