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

如何在Java中使用Selenium WebDriver切换到另一个选项卡

卫深
2023-03-14

我打开Google.com,然后点击“Gmail”超链接,一个新的标签就在同一浏览器上打开了。

现在我想切换到这个新选项卡,在这里使用Selenium WebDriver打开GMail。

  WebDriver wd = new ChromeDriver();
  wd.get("https://www.google.co.in/?gws_rd=ssl");       
  wd.findElement(By.linkText("Gmail")).sendKeys(Keys.CONTROL,Keys.RETURN);
String Tab1 = wd.getWindowHandle(); 
ArrayList<String> availableWindows = new ArrayList<String>(wd.getWindowHandles()); 
if (!availableWindows.isEmpty()) { 
wd.switchTo().window(availableWindows.get(1)); 
}

解决方案2:

driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t");

敬请建议。我被困在这上面了。

共有1个答案

宗穆冉
2023-03-14

在我看来,driver.getWindowHandles()对选项卡不起作用...您总是会得到一个带有当前选项卡句柄的one item数组...[删除旧答案,因为现在似乎已经修复]

更新(6/16/2016):当前版本的Selenium(服务器独立2.53.0)似乎有不同的行为。现在我正在使用类似这样的东西来打开/切换驱动程序到新的选项卡:

更新(11/16/2016):硒3.0.1似乎又改变了事情?我现在必须使用javascript打开一个新标签。这似乎只适用于Chrome...Firefox打开了一个新窗口。我将看看是否可以使用GeckoDriver的设置(capability/profile?)更改该行为。

// Actions actions = new Actions(driver); 
// actions.keyDown(Keys.CONTROL).sendKeys("t").keyUp(Keys.CONTROL).build().perform();

((JavascriptExecutor)driver).executeScript("window.open('about:blank', '_blank');");

Set<String> tab_handles = driver.getWindowHandles();
    int number_of_tabs = tab_handles.size();
    int new_tab_index = number_of_tabs-1;
    driver.switchTo().window(tab_handles.toArray()[new_tab_index].toString()); 
  //  set tab_index to the number of window/tab you want.  0 is the first tab 

       ArrayList<String> tabs_windows = new ArrayList<String> (driver.getWindowHandles());
    driver.switchTo().window(tabs_windows.get(tab_index));
// driver.findElement(By.cssSelector("body")).sendKeys(Keys.chord(Keys.CONTROL, "t"));

((JavascriptExecutor)driver).executeScript("window.open('about:blank', '_blank');");

    Set<String> tab_handles = driver.getWindowHandles();
    int number_of_tabs = tab_handles.size();
    int new_tab_index = number_of_tabs-1;
    driver.switchTo().window(tab_handles.toArray()[new_tab_index].toString()); 

更新(11/16/2016):使用Ctrl-W关闭的旧方法似乎也被打破了...使用此:

((JavascriptExecutor)driver).executeScript("close();");
 类似资料:
  • 问题内容: 我们开发了一个Chrome扩展程序,我想用Selenium测试我们的扩展程序。我创建了一个测试,但是问题是我们的扩展程序在安装后会打开一个新选项卡,我认为我从另一个选项卡中得到了例外。是否可以切换到我正在测试的活动标签?另一个选择是先禁用扩展名,然后登录到我们的网站,然后再启用该扩展名。可能吗?这是我的代码: 测试失败,原因是,因为在新选项卡(由扩展名打开)中,“登录”不可见(我认为仅

  • 是否有可能在运行时使用Appium从一个应用程序切换到另一个应用程序。 谢啦

  • 我正在打开一个页面,执行一些操作,我正在使用这段代码在下一个选项卡中打开另一个链接 字符串url=“https://qa.logfireapps.com/lgf_700_qa_rf”; String args1=String.format(“window.open(”%s“,”%s“);”,url,“new”); ((JavascriptExecutor)driver).ExecuteScript

  • 确切错误消息:线程“main”java中出现异常。lang.IndexOutOfBoundsException:索引:1,大小:1(java)。util。ArrayList。rangeCheck(ArrayList.java:653) 代码段:

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

  • 我正在构建一个定制的Java库。我把我的大部分“重复”代码都保存在那里,比如文件处理、字符串处理等。每次我想使用它们时,我都必须将该类复制并粘贴到我正在进行的其他项目中。有没有办法让这个自定义库类成为“依赖项”?我在用我的智能手机。