当前位置: 首页 > 知识库问答 >
问题:

使用WindowHandles使用Selenium跟踪和迭代选项卡和窗口的最佳方法

颜昕
2023-03-14

共有1个答案

庄元龙
2023-03-14

你说得很对:

WindowHandles将按照最早的窗口在前,最新的窗口在后的方式进行排序。但事实并非如此:这完全是随机的!

在一次讨论中,西蒙明确提到:

如果需要,请调整测试环境[My Configuration-Selenium:3.5.3,IEDRiverServer:3.5.0.0(64位),IE:V10.0]

package demo;

import java.util.Iterator;
import java.util.Set;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class NEW_TAB_Handling {

    public static void main(String[] args)  {


        System.setProperty("webdriver.ie.driver", "C:\\Utility\\BrowserDrivers\\IEDriverServer.exe");
        WebDriver driver =  new InternetExplorerDriver();
        driver.get("http://www.google.com");
        String first_tab = driver.getWindowHandle();
        System.out.println("Working on Google");
        ((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');");
        WebDriverWait wait = new WebDriverWait(driver,5);
        wait.until(ExpectedConditions.numberOfWindowsToBe(2));
        Set<String> s1 = driver.getWindowHandles();
        Iterator<String> i1 = s1.iterator();
        while(i1.hasNext())
        {
            String next_tab = i1.next();
            if (!first_tab.equalsIgnoreCase(next_tab))
            {
                driver.switchTo().window(next_tab);

                System.out.println("Working on Facebook");
            }
        }
        String second_tab = driver.getWindowHandle();
        ((JavascriptExecutor) driver).executeScript("window.open('http://youtube.com/');");
        wait.until(ExpectedConditions.numberOfWindowsToBe(3));
        Set<String> s2 = driver.getWindowHandles();
        Iterator<String> i2 = s2.iterator();
        while(i2.hasNext())
        {
            String next_tab = i2.next();
            if (!first_tab.equalsIgnoreCase(next_tab) && !second_tab.equalsIgnoreCase(next_tab))
            {
                driver.switchTo().window(next_tab);
                System.out.println("Working on Youtube");
            }
        }
        driver.quit();
        System.out.println("Quit the WebDriver instance");
    }
}

控制台输出:

Working on Google
Working on Facebook
Working on Youtube
Quit the WebDriver instance

您可以在Open web中的新选项卡Selenium+python中找到基于python的讨论

 类似资料:
  • 将Selenium WebDriver与Java结合使用。我正在尝试自动化一个功能,其中我必须打开一个新的选项卡,在那里做一些操作,并回到以前的选项卡(父)。我用了开关手柄,但它不起作用。还有一件奇怪的事情,两个选项卡有相同的窗口句柄,因此我不能在选项卡之间切换。 然而,当我尝试使用不同的Firefox窗口时,它都能工作,但是对于tab它就不行了。 请帮帮我.我如何切换标签。或者我如何切换选项卡而

  • 问题内容: 我有一个表单,当我单击它时会在新选项卡中打开。当我尝试导航到该新选项卡时,我不断收到NoSuchWindowException。代码非常简单。“ myframe”是新标签中最终将被插入信息的框架。我应该再等吗? 问题答案: 感谢Debanjan(并为以后的回复表示歉意-刚回到办公室)。我能够通过使用解决此问题 我没有意识到,当我单击打开表单时,另一个窗口在后台非常短暂地打开,然后关闭。

  • 我已经安装了 console2 和 git bash,我的目标是让 git bash 使用选项卡,我已经将控制台设置的目标路径更改为。当我打开控制台时,它不再为我提供选项卡选项。

  • 我试图在IE11中通过点击一个链接打开一个新的标签,但它会在点击一个链接时打开一个新的窗口。我在谷歌上寻找合适的方法,但不知道如何实现这一点。有人能帮忙吗? 当手动单击时,link会在一个选项卡中打开,但当通过selenium单击时,它会打开一个新窗口。 我没有添加任何代码,因为没有太多要添加的。我使用webelement.click()单击了link元素,并且在驱动程序功能中禁用了persist

  • 我试着用: 但是Selenium Webdriver的焦点停留在第一个选项卡上,因为我认为它没有为新选项卡创建新句柄。 还有,试过这个: 任何帮助都很感激。谢了。

  • 本文向大家介绍ASP.NET中MultiView和View选项卡控件的使用方法,包括了ASP.NET中MultiView和View选项卡控件的使用方法的使用技巧和注意事项,需要的朋友参考一下 MultiView 控件可用作一个或多个 View 控件的外部容器。而 View 控件可以包含标记和控件的任意组合。您可以使用 MultiView 和 View 控件来执行各种任务,例如基于用户选择提供替换控