Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用Selenium Webdriver在Internet Explorer中将焦点切换到新选项卡/窗口_Java_Internet Explorer_Selenium_Selenium Webdriver - Fatal编程技术网

Java 无法使用Selenium Webdriver在Internet Explorer中将焦点切换到新选项卡/窗口

Java 无法使用Selenium Webdriver在Internet Explorer中将焦点切换到新选项卡/窗口,java,internet-explorer,selenium,selenium-webdriver,Java,Internet Explorer,Selenium,Selenium Webdriver,这里的问题是,我无法同时将焦点集中到新的选项卡/窗口,而是将焦点保留在第一个选项卡/窗口中。请帮忙 driver=new InternetExplorerDriver(); driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t"); //driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"n"); for (String winHa

这里的问题是,我无法同时将焦点集中到新的选项卡/窗口,而是将焦点保留在第一个选项卡/窗口中。请帮忙

driver=new InternetExplorerDriver();
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
//driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"n");
for (String winHandle : driver.getWindowHandles()) 
{
    driver.switchTo().window(winHandle);
}
driver.get("https://google.com/");

实现你所要求的最简单的方法是:

  • 获取初始窗口的句柄
  • 打开新窗口
  • 获取此时所有打开窗口的句柄列表,并删除初始窗口句柄
  • 切换到上一步检索到的列表中的剩余窗口句柄

  • 实现你所要求的最简单的方法是:

  • 获取初始窗口的句柄
  • 打开新窗口
  • 获取此时所有打开窗口的句柄列表,并删除初始窗口句柄
  • 切换到上一步检索到的列表中的剩余窗口句柄

  • IE驱动程序不支持窗口内选项卡的枚举。此外,WebDriver一般不支持自动“手动”打开选项卡,如使用
    Control+t
    打开的选项卡。特定的驱动程序可能支持该功能,但它不是API合同中全局支持的部分


    绝大多数时候,用户试图“手动打开一个新标签,切换到它,并使其自动化”,但用例并没有完全考虑清楚。由于您拒绝说明为什么要执行此操作,而不是在新窗口中启动新的驱动程序实例,因此无法推测您应该采取何种操作。

    IE驱动程序不支持在窗口中枚举选项卡。此外,WebDriver一般不支持自动“手动”打开选项卡,如使用
    Control+t
    打开的选项卡。特定的驱动程序可能支持该功能,但它不是API合同中全局支持的部分

    绝大多数时候,用户试图“手动打开一个新标签,切换到它,并使其自动化”,但用例并没有完全考虑清楚。由于您拒绝说明为什么要执行此操作,而不是在新窗口中启动新的驱动程序实例,因此无法推测您应该采取什么操作。

    请尝试,在打开选项卡后使用Java robot进行切换。下面的代码使用与解决问题相同的原理

    ArrayList<String> tabs2 = new ArrayList<String>(driver.getWindowHandles());
        System.out.println(tabs2.size());
    
        for (int i = tabs2.size()-1; i>=0; i--) {
            Thread.sleep(2000);
            driver.switchTo().window(tabs2.get(i));
            Robot robot = new Robot();
    
            robot.keyPress(KeyEvent.VK_CONTROL);
            robot.keyPress(KeyEvent.VK_TAB);
            robot.keyRelease(KeyEvent.VK_TAB);
            robot.keyRelease(KeyEvent.VK_CONTROL);
            System.out.println(driver.getTitle() + "i: " + i);
            driver.close();
        }
    
    ArrayList tabs2=新的ArrayList(driver.getWindowHandles());
    System.out.println(tabs2.size());
    对于(int i=tabs2.size()-1;i>=0;i--){
    《睡眠》(2000年);
    driver.switchTo().window(tabs2.get(i));
    机器人=新机器人();
    机器人按键(KeyEvent.VK_控制);
    robot.keyPress(KeyEvent.VK_选项卡);
    robot.keyRelease(KeyEvent.VK_选项卡);
    robot.keyRelease(KeyEvent.VK_控制);
    System.out.println(driver.getTitle()+“i:”+i);
    driver.close();
    }
    
    打开选项卡后,请尝试使用Java robot进行切换。下面的代码使用与解决问题相同的原理

    ArrayList<String> tabs2 = new ArrayList<String>(driver.getWindowHandles());
        System.out.println(tabs2.size());
    
        for (int i = tabs2.size()-1; i>=0; i--) {
            Thread.sleep(2000);
            driver.switchTo().window(tabs2.get(i));
            Robot robot = new Robot();
    
            robot.keyPress(KeyEvent.VK_CONTROL);
            robot.keyPress(KeyEvent.VK_TAB);
            robot.keyRelease(KeyEvent.VK_TAB);
            robot.keyRelease(KeyEvent.VK_CONTROL);
            System.out.println(driver.getTitle() + "i: " + i);
            driver.close();
        }
    
    ArrayList tabs2=新的ArrayList(driver.getWindowHandles());
    System.out.println(tabs2.size());
    对于(int i=tabs2.size()-1;i>=0;i--){
    《睡眠》(2000年);
    driver.switchTo().window(tabs2.get(i));
    机器人=新机器人();
    机器人按键(KeyEvent.VK_控制);
    robot.keyPress(KeyEvent.VK_选项卡);
    robot.keyRelease(KeyEvent.VK_选项卡);
    robot.keyRelease(KeyEvent.VK_控制);
    System.out.println(driver.getTitle()+“i:”+i);
    driver.close();
    }
    
    你能给我一个关于@Tom Trumper的代码吗?你能给我一个关于@Tom Trumper的代码吗?分享你的研究对每个人都有帮助。告诉我们您尝试了什么,以及为什么它不能满足您的需求。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另请参阅。我已经尝试了上述代码,它在firefox浏览器中运行良好,[link]中提供的解决方案共享您的研究成果,可以帮助所有人。告诉我们您尝试了什么,以及为什么它不能满足您的需求。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另请参阅。我已经尝试了上述代码,它在firefox浏览器和[链接]中提供的解决方案中运行良好