当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,想知道是否有人为此找到了解决方法?
由于
答案 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和值类型:十进制)。