首页 > 解决方案 > 有没有办法将 Webdriver 切换到打开新窗口并自动关闭父窗口的新会话?

问题描述

我有一个需要我使用 IE 的测试用例。当我输入 url 时,它会将我导航到一个新的会话窗口,在该窗口中我的 lanID 授权并自动关闭父窗口。所以我无法切换到新打开的窗口。

org.openqa.selenium.NoSuchWindowException:当前焦点窗口已关闭。

标签: internet-explorerswitch-statementwindow

解决方案


您可以尝试使用 driver.Quit 方法关闭父窗口,然后创建一个新的 InternetExplorerDriver 实例来打开子窗口。通过使用这种方法,似乎不需要切换窗口。如果我误解了您的问题,请随时告诉我。

driver.Quit 和 driver.Close 方法的区别如下:

driver.close()命令用于关闭当前具有焦点的浏览器窗口。如果只打开一个浏览器,则调用 driver.close() 会退出整个浏览器会话。

driver.quit ()命令调用 driver.dispose 方法,它将关闭所有浏览器窗口并终止 WebDriver 会话。如果我们在程序结束时不使用 quit(),WebDriver 会话将无法正常关闭。

请检查以下示例:

    private const string URL = @"https://dillion132.github.io/login.html";
    private const string IE_DRIVER_PATH = @"D:\Downloads\webdriver\IEDriverServer_x64_3.14.0";  // where the Selenium IE webdriver EXE is.
    static void Main(string[] args)
    {
        InternetExplorerOptions opts = new InternetExplorerOptions() { InitialBrowserUrl = URL, IntroduceInstabilityByIgnoringProtectedModeSettings = true, IgnoreZoomLevel=true };

        //create a webdriver to open parent window. after doing something, close the window.
        using (var driver = new InternetExplorerDriver(IE_DRIVER_PATH, opts))
        {
            driver.Navigate(); 

            Thread.Sleep(3000);
            var txtname = driver.FindElementById("txtname");
            txtname.SendKeys("BBB");

            var txtpass = driver.FindElementById("txtpassword");
            txtpass.SendKeys("123");

            var submit = driver.FindElementById("Submit1");
            submit.Click(); 
            driver.Quit(); 
        }

        InternetExplorerOptions opts2 = new InternetExplorerOptions() { InitialBrowserUrl = "https://www.bing.com", IntroduceInstabilityByIgnoringProtectedModeSettings = true, IgnoreZoomLevel = true };
        //create another window.
        using (var driver = new InternetExplorerDriver(IE_DRIVER_PATH, opts2))
        {
            driver.Navigate(); 
            Thread.Sleep(3000); 
        }

        Console.ReadKey();

    }

推荐阅读