3

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

谢谢

4

2 回答 2

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 。

于 2012-09-18T11:34:28.560 回答
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 和值类型:十进制)。

于 2016-04-13T12:26:11.593 回答