无法切换到';当前活动选项卡';在chrome中使用java中的webdriver

无法切换到';当前活动选项卡';在chrome中使用java中的webdriver,java,selenium,selenium-webdriver,tabs,selenium-chromedriver,Java,Selenium,Selenium Webdriver,Tabs,Selenium Chromedriver,我无法使用WebDriver切换到Chrome中的“当前活动选项卡”。我尝试了以下方法: 我们可以切换到tab,但是我们不知道哪一个是当前活动选项卡 我尝试了driver.switchTo().activeElement(),但是没有任何帮助 我尝试了驱动程序。switchTo().Window(“”)无效 尝试了以下代码段 Set allWindowHandles=driver.getWindowHandles(); 用于(字符串windowHandle:allWindowHandles){

我无法使用WebDriver切换到Chrome中的“当前活动选项卡”。我尝试了以下方法:
我们可以切换到tab,但是我们不知道哪一个是当前活动选项卡

  • 我尝试了
    driver.switchTo().activeElement()
    ,但是没有任何帮助
  • 我尝试了
    驱动程序。switchTo().Window(“”
    )无效
  • 尝试了以下代码段
  • Set allWindowHandles=driver.getWindowHandles();
    用于(字符串windowHandle:allWindowHandles){
    如果(!windowHandle.equals()){
    driver.switchTo().window(windowHandle);
    }
    }
    

    但是,获取当前活动选项卡句柄是一个问题。

    已更新-

    以下是使用多个窗口/选项卡(即两个或两个以上的窗口/选项卡)的工作代码(C#,用Chrome测试)。 使用这种方法,您可以从任何选项卡切换到任何其他选项卡。(代码未优化,您可以进一步优化。)

    [测试]
    公共无效多窗口()
    {
    IWebDriver驱动程序=新的ChromeDriver(@“G:\Selenium\Tools\Selenium\”;
    WebDriverWait wait=新的WebDriverWait(驱动程序,TimeSpan.FromSeconds(60));
    List allWindowHandles=new List();
    List allCapturedWindowHandles=new List();
    字符串currentWidowHandle=null;
    //导航到URL
    driver.Navigate().gotour(@)http://www.w3schools.com/js/");
    driver.Manage().Window.Maximize();
    //获取第一个窗口句柄
    currentWidowHandle=driver.CurrentWindowHandle;
    添加(currentWidowHandle);
    Thread.Sleep(2000);//不建议使用静态等待
    Console.WriteLine(“\n第一个选项卡标题:“+driver.Title”);
    Console.WriteLine(“第一个选项卡URL:+driver.URL”);
    //打开新选项卡的代码
    //单击链接打开“新建”选项卡
    IWebElement TryItYourselfLinkJS=driver.findelelement(由.CssSelector(“a[href='tryit.asp?filename=tryjs\u myfirst']));
    TryItYourselfLinkJS.Click();
    Thread.Sleep(5000);//不建议使用静态等待
    //将所有窗口句柄存储在列表中
    allWindowHandles=driver.WindowHandles.ToList();
    //获取新窗口句柄,该句柄不等于第一个选项卡。
    for(int i=0;idiv>div>a:n类型(4)”);
    topNavigationCSS.Click();
    //单击链接打开第三个选项卡
    IWebElement TryItYourselfLinkCSS=wait.Until((d)=>{return driver.FindElement(由.CssSelector(“div[class='w3-example']>a[href='tryit.asp?filename=trycss_default']););
    TryItYourselfLinkCSS.Click();
    Thread.Sleep(5000);//不建议使用静态等待
    //将所有窗口句柄存储在列表中
    allWindowHandles=driver.WindowHandles.ToList();
    //获取新窗口句柄,该句柄不等于前两个选项卡。
    for(int i=0;i

    希望这有帮助:)

    您使用了多少个选项卡?您好,amitbobade,谢谢您的回复,但是如果“allWindowHandles.count”大于5左右,那么它会选择哪个选项卡?在您的逻辑情况下,它可能会设置循环中的最后一个选项卡,这将是不正确的,因为所有其他4个窗口都不等于parentWindow。我更新了代码,使其可以使用两个到两个以上的窗口/选项卡。您可以从任何选项卡切换到任何选项卡。我希望这就是你想要的。我有三个
    Set<String> allWindowHandles = driver.getWindowHandles();  
      for (String windowHandle : allWindowHandles) {
       if (!windowHandle.equals(<cannot get the active window handle>)) {
          driver.switchTo().window(windowHandle);
       }
    }
    
            [Test]
        public void MultipleWindows()
        {
            IWebDriver driver = new ChromeDriver(@"G:\Selenium\Tools\Selenium\");
            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60));
    
            List<string> allWindowHandles = new List<string>();
            List<string> allCapturedWindowHandles = new List<string>();
            string currentWidowHandle = null;
    
            //Navigate to URL
            driver.Navigate().GoToUrl(@"http://www.w3schools.com/js/");
            driver.Manage().Window.Maximize();
    
            //Get First Window Handle
            currentWidowHandle = driver.CurrentWindowHandle;
            allCapturedWindowHandles.Add(currentWidowHandle);
    
            Thread.Sleep(2000); //Static wait is not recommended
            Console.WriteLine("\nFirst Tab Title: " + driver.Title);
            Console.WriteLine("First Tab URL: " + driver.Url);
    
            //Code to open new tab
            //Click on the link to open new tab
            IWebElement TryItYourselfLinkJS = driver.FindElement(By.CssSelector("a[href='tryit.asp?filename=tryjs_myfirst']"));
            TryItYourselfLinkJS.Click();
    
            Thread.Sleep(5000); //Static wait is not recommended
    
            //Store all window handles in a list
            allWindowHandles = driver.WindowHandles.ToList();
    
            //Get new window handle, the one which is not equals to first tab.
            for (int i = 0; i < allWindowHandles.Count; i++)
            {
                int k = 0;
    
                for (int j = 0; j < allCapturedWindowHandles.Count; j++)
                {
                    if (allWindowHandles[i] == allCapturedWindowHandles[j])
                    {
                        k++;
                    }
                }
    
                if (k == 0)
                {
                    allCapturedWindowHandles.Add(allWindowHandles[i]);
                }
    
            }
    
            //Switch to new window handle i.e. second tab
            driver.SwitchTo().Window(allCapturedWindowHandles[1]);
    
            Thread.Sleep(6000); //Static Wait is not recommended
            Console.WriteLine("\nSwitched to Second Tab. \nSecond Tab Title: " + driver.Title);
            Console.WriteLine("Second Tab URL: " + driver.Url);
    
            //Swich back to first window
            driver.SwitchTo().Window(allCapturedWindowHandles[0]);
    
            Thread.Sleep(5000); //Static wait is not recommended
            Console.WriteLine("\nSwitched to First Tab. \nFirst Tab Title: " + driver.Title);
            Console.WriteLine("First Tab URL: " + driver.Url);
    
            //Code to open third tab. 
            IWebElement topNavigationCSS = driver.FindElement(By.CssSelector("div#topnav>div>div>a:nth-of-type(4)"));
            topNavigationCSS.Click();
    
            //Click the link to open third tab
            IWebElement TryItYourselfLinkCSS = wait.Until<IWebElement>((d) => { return driver.FindElement(By.CssSelector("div[class='w3-example']>a[href='tryit.asp?filename=trycss_default']")); });
            TryItYourselfLinkCSS.Click();
    
            Thread.Sleep(5000); //Static Wait is not recommended
    
            //Store all window handles in a list
            allWindowHandles = driver.WindowHandles.ToList();
    
            //Get new window handle, the one which is not equals to first two tabs.
            for (int i = 0; i < allWindowHandles.Count; i++)
            {
                int k = 0;
    
                for (int j = 0; j < allCapturedWindowHandles.Count; j++)
                {
                    if (allWindowHandles[i] == allCapturedWindowHandles[j])
                    {
                        k++;
                    }
                }
    
                if (k == 0)
                {
                    allCapturedWindowHandles.Add(allWindowHandles[i]);
                }
            }
    
            //Switch to new window i.e. third window
            driver.SwitchTo().Window(allCapturedWindowHandles[2]);
    
            Thread.Sleep(6000); //Static Wait is not recommended
            Console.WriteLine("\nSwitched to Third Tab. \nThird Tab Title: " + driver.Title);
            Console.WriteLine("Third Tab URL: " + driver.Url);
    
            //Switch to second tab
            driver.SwitchTo().Window(allCapturedWindowHandles[1]);
    
            Thread.Sleep(5000); //Static Wait is not recommended
            Console.WriteLine("\nSwitched to Second Tab. \nSecond Tab Title: " + driver.Title);
            Console.WriteLine("Second Tab URL: " + driver.Url);
    
            Console.WriteLine("\nTotal Tabs: " + allCapturedWindowHandles.Count);
            Console.WriteLine("All Window Handles: ");
            for (int i = 0; i < allCapturedWindowHandles.Count; i++)
            {
                Console.WriteLine(allCapturedWindowHandles[i]);
            }
        }