无法使用SwitchTo()使用Selenium Webdriver切换到新窗口

时间:2015-03-02 12:16:38

标签: c# selenium selenium-webdriver

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

我试过了:

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);

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

那么我怎样才能进入我需要测试的应用程序窗口?我试图切换到看起来尝试跳转到应用程序窗口的不同弹出窗口,但这不起作用。提前致谢

1 个答案:

答案 0 :(得分:1)

这可能会有所帮助,很有用:

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]);