【问题标题】:Cannot switch to new window using Selenium Webdriver using switchTo()使用 switchTo() 无法使用 Selenium Webdriver 切换到新窗口
【发布时间】:2015-03-02 12:16:37
【问题描述】:

我已经搜索并搜索了这个问题的答案。我正在使用 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);

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

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

【问题讨论】:

  • 使用PopupWindowFinder 类,因为您使用的是C#。并且,请参阅我对类似问题的回答 here

标签: c# selenium selenium-webdriver


【解决方案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]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-09
    • 2021-07-31
    • 2017-05-06
    • 1970-01-01
    • 2019-12-02
    • 2012-12-31
    • 2012-06-29
    • 2015-05-01
    相关资源
    最近更新 更多