无法使用switchTo()使用Selenium Web驱动程序切换到新窗口

本文关键字:窗口 新窗口 驱动程序 Selenium switchTo 使用 Web | 更新日期: 2024-09-21 15:36:45

我一直在寻找这个问题的答案。我正在IE8中使用SeleniumWebdriver和C#进行测试。在测试的某个时刻,我需要单击一个按钮,然后打开一个新的应用程序窗口,其中包含需要填写的表单以继续测试。

我试过:

driver.switchTo().Window(driver.WindowHandles[0]);
driver.switchTo().Window(driver.WindowHandles[1]); //this one usually returns and error
driver.switchTo().Window(driver.WindowHandles.Last());

我也试过

foreach(String handle in driver.WindowHandles)
{
     driver.switchTo().Window(handle);
     //do things here
}

每一个都失败了,当我将句柄名称写入控制台时,无论我尝试做什么,输出都是相同的窗口名称。有人知道如何获得新窗口吗?

补充问题:

感谢@Saifur使用PopupWindowFinder的新方向。

这是我迄今为止尝试过的

string currentWindow = driver.CurrentWindowHandle;
PopupWindowFinder finder = new PopupWindowFinder(driver);
string popWindow = finder.Click(driver.FindElementById("Element"));
driver.SwitchTo().Window(popWindow);

因此,这应该点击将开始弹出事件的元素,然后开关应该将其放在弹出窗口上,这样我就可以继续测试了。现在问题来了。当finder点击Element时,我正在测试的应用程序会创建一个弹出窗口,然后该弹出窗口被关闭,然后出现另一个弹出框,然后关闭,最后出现我需要测试的实际应用程序,它是监视器上的当前焦点,或者在启动所有这些的初始页面后面。

那么,我如何才能到达我需要测试的应用程序窗口?我试着切换到不同的弹出窗口,试图将其跳转到应用程序窗口,但没有成功。提前感谢

无法使用switchTo()使用Selenium Web驱动程序切换到新窗口

这可能会有所帮助,它的工作魅力:

IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
//To open new tab
js.ExecuteScript("window.open()");
ArrayList tabs = new ArrayList(driver.WindowHandles);
//Switch driver to new tab
driver.SwitchTo().Window(driver.WindowHandles[1]);
//Close new tab
driver.Close();
//Switch driver to old tab
driver.SwitchTo().Window(driver.WindowHandles[0]);