我有一些在chrome webdriver上打开多个窗口的代码
MessageBox.Show(chrome.WindowHandles.Count.ToString());
foreach (var link in _links)
{
js.ExecuteScript("window.open('" + link.Item1 + "', '" + link.Item2 + "', 'toolbar=no,scrollbars=no,resizable=no,width=400,height=400')");
}
on start chrome windowHandles = 1这是正确的。执行以上代码后,windowandles = 50,这是正确的。
现在问题开始了当我试图关闭我打开的窗口
for (int i = 1; i < chrome.WindowHandles.Count - 1; i++)
{
chrome.SwitchTo().Window(chrome.WindowHandles[i]).Close();
}
MessageBox.Show(chrome.WindowHandles.Count.ToString());
上面的代码让26个窗口打开,我不明白为什么,你能帮助吗?我做错了什么?
我建议你有一个这样的拆除方法:
[TearDown]
public void TearDown()
{
if (Driver != null)
Driver.Quit();
}
Quit()
是一个webdriver命令,该命令调用driver.dispose
方法,该方法依次关闭所有浏览器窗口并终止WebDriver会话。如果我们在程序结束时不使用quit()
, WebDriver会话将不会正确关闭,文件将不会从内存中清除。这可能导致内存泄漏错误。
就像cruisepandey说的,反向操作。(许多秋明石油公司)
Parallel.ForEach(_links, link =>
{
js.ExecuteScript("window.open('" + link.Item1 + "', '" + link.Item2 + "', 'toolbar=no,scrollbars=no,resizable=no,width=1000,height=500')");
HtmlDocument doctab = new HtmlDocument();
doctab.LoadHtml(chrome.PageSource);
_docprodutos.Add(doctab);
});
_links.Reverse();
foreach (var janela in _links)
{
chrome.SwitchTo().Window(janela.Item2).Close();
}