搜索google上的主题我发现了多篇有用的文章,但是当我实现它们并打开新标签时,驱动程序的WindowHandles属性只包含1个句柄,而不是2.这是一个示例代码:
IWebDriver driver = new FirefoxDriver();
driver.Url = @"http://www.google.com";
driver.Navigate();
string currentHandle = driver.CurrentWindowHandle;
ReadOnlyCollection<string> originalHandles = driver.WindowHandles;
var element = driver.FindElement(By.LinkText("English"));
Actions newTab = new Actions(driver);
newTab.KeyDown(Keys.Control).KeyDown(Keys.Shift).Click(element).KeyUp(Keys.Control).KeyUp(Keys.Shift).Build().Perform();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
string tabHandle = wait.Until<string>((d) => {
string foundHandle = null;
List<string> newHandles = driver.WindowHandles.Except(originalHandles).ToList();
if (newHandles.Count > 0)
{
foundHandle = newHandles[0];
}
return foundHandle;
});
driver.SwitchTo().Window(tabHandle);
// Do whatever you need to on the popup browser, then...
driver.Close();
driver.SwitchTo().Window(currentHandle);
答案 0 :(得分:0)
嗨,如果只有两个窗口那么最简单的答案是请使用下面的代码
driver.SwitchTo().Window(driver.WindowHandles.Last());
上面的代码将切换到最近打开的窗口,该窗口应该是您在单击链接时刚刚打开的窗口。
尝试以下代码替代方式
var currentWindow = driver.CurrentWindowHandle;
var availableWindows = new List<string>(driver.WindowHandles);
foreach (string mywindows in availableWindows) {
if (mywindows != currentWindow)
{
driver.SwitchTo().Window(w);
// perform your action
}else{
driver.SwitchTo().Window(currentWindow);
}
}