[英]Cannot switch to new window using Selenium Webdriver using switchTo()
我已经搜索了这个问题的答案。 我正在使用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);
因此,这应该单击将开始弹出事件的元素,然后开关应将其放置在弹出窗口中,以便我可以继续测试。 这是现在的问题。 当通过finder
单击Element
时,正在测试的应用程序会创建一个弹出窗口,然后关闭该弹出窗口,然后出现另一个弹出窗口,然后将其关闭,最后出现需要测试的实际应用程序,并且该当前应用程序是监视器或启动所有这些操作的初始页面的后面。
那么,如何进入需要测试的应用程序窗口? 我试图切换到显示为尝试将其跳至应用程序窗口的不同弹出窗口,但这没有用。 提前致谢
这可能会有所帮助,它很有用:
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]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.