打开一个新选项卡并将其处理

时间:2016-04-06 06:35:02

标签: c# selenium-webdriver

搜索google上的主题我发现了多篇有用的文章,但是当我实现它们并打开新标签时,驱动程序的WindowHandles属性只包含1个句柄,而不是2.这是一个示例代码:

IWebDriver driver = new FirefoxDriver();
        driver.Url = @"http://www.google.com";
        driver.Navigate();

        string currentHandle = driver.CurrentWindowHandle;
        ReadOnlyCollection<string> originalHandles = driver.WindowHandles;

        var element = driver.FindElement(By.LinkText("English"));

        Actions newTab = new Actions(driver);
        newTab.KeyDown(Keys.Control).KeyDown(Keys.Shift).Click(element).KeyUp(Keys.Control).KeyUp(Keys.Shift).Build().Perform();

        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));

        string tabHandle = wait.Until<string>((d) => {
            string foundHandle = null;
            List<string> newHandles = driver.WindowHandles.Except(originalHandles).ToList();
            if (newHandles.Count > 0)
            {
                foundHandle = newHandles[0];
            }

            return foundHandle;
        });

        driver.SwitchTo().Window(tabHandle);

        // Do whatever you need to on the popup browser, then...
        driver.Close();
        driver.SwitchTo().Window(currentHandle);

1 个答案:

答案 0 :(得分:0)

嗨,如果只有两个窗口那么最简单的答案是请使用下面的代码

driver.SwitchTo().Window(driver.WindowHandles.Last());

上面的代码将切换到最近打开的窗口,该窗口应该是您在单击链接时刚刚打开的窗口。

尝试以下代码替代方式

 var currentWindow = driver.CurrentWindowHandle;
 var availableWindows = new List<string>(driver.WindowHandles);

   foreach (string mywindows in availableWindows)    {

                    if (mywindows  != currentWindow)
                    {
                        driver.SwitchTo().Window(w);
                         // perform your action
                       }else{ 
                            driver.SwitchTo().Window(currentWindow);
                        }
                }