【问题标题】:How to switch between multiple tabs(more than 2) open in same window using Selenium Webdriver如何使用 Selenium Webdriver 在同一窗口中打开的多个选项卡(超过 2 个)之间切换
【发布时间】:2015-10-16 06:03:39
【问题描述】:

我正在学习 Selenium-Webdriver,以便练习在一个场景中工作,但我被困在第 3 步。场景如下:

  1. 打开 google 主页并执行一些搜索,例如搜索“WebDriver”一词。
  2. 在同一窗口的新选项卡中打开前两个链接。
  3. 导航到第二个和第三个选项卡并获取它们的标题
  4. 关闭选项卡并切换回 google 结果选项卡。

到目前为止,我可以打开谷歌主页,搜索“WebDriver”这个词并打开前两个链接,但现在我无法切换到第二个和第三个选项卡并关闭它们。到目前为止我的代码是:

    String originalHandle = driver.getWindowHandle();
    System.out.println("Before switching title is:" +driver.getTitle());
    String selectLinkOpeninNewTab = Keys.chord(Keys.COMMAND,Keys.ENTER);
    WebElement link1 = driver.findElement(By.xpath(".//*[@id='rso']/div[2]/div[1]/div/h3/a"));
    link1.sendKeys(selectLinkOpeninNewTab);
    WebElement link2 = driver.findElement(By.xpath(".//*[@id='rso']/div[2]/div[2]/div/h3/a"));
    link2.sendKeys(selectLinkOpeninNewTab);

    Set<String> s1 = driver.getWindowHandles();
    Iterator<String> i1 = s1.iterator();
    int i = 0;
    while(i1.hasNext())
    {
        i++;
    String childwindow = i1.next();

    if(!originalHandle.equalsIgnoreCase(childwindow))
    {
    driver.switchTo().window(childwindow);
    Thread.sleep(10000);
    System.out.println("After switching title of new Tab "+i+ " title is " +driver.getTitle());
    driver.close();
    }
}

driver.switchTo().window(originalHandle);
System.out.println("Original window tab title is" +driver.getTitle() );

我不确定哪里出了问题以及如何解决它。 :(

【问题讨论】:

  • 能否提供网站的链接?
  • @saifur 第一个链接是谷歌搜索:google.co.in/… 从该链接,我试图打开前两个结果链接(页面上存在),如下所示:1. www.seleniumhq。 org/projects/webdriver/ 2.seleniumhq.org/docs/03_webdriver.jsp

标签: java selenium selenium-webdriver


【解决方案1】:

可能为时已晚,但希望这会有所帮助:

for (String winHandle : driver.getWindowHandles()) { //Gets the new window handle
        System.out.println(winHandle);
        driver.switchTo().window(winHandle);        // switch focus of WebDriver to the next found window handle (that's your newly opened window)              
    }

【讨论】:

    【解决方案2】:

    请尝试以下代码:

    Set<String> s1 = driver.getWindowHandles();
    for(String childwindow : s1) {
       if(!originalHandle.equals(childwindow)) {
           driver.switchTo().window(childwindow);
           System.out.println("Tab title is " + driver.getTitle();
       }
       driver.close();
    }
    driver.switchTo().window(originalHandle);
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      我搜索了诸如标签切换之类的功能,但一无所获。 最接近这一点的是窗户的开关。 (WindowHandles 可以用来切换标签页的cmets 很多,但这不是真的——我试过很多,它只能用于windows 切换,不能用于标签页切换)

      如果你需要在新窗口中打开 -- 你需要点击带有按下 shift btn 的链接

      代码类似于

      Actions.KeyDown(Keys.Shift).Click(ElementToClick).KeyUp(Keys.Shift).Build().Perform();
      

      如果需要切换窗口

      var _windowsList = new List<String>(Instance.WindowHandles);
      Instance.SwitchTo().Window(_windowsList[0]);
      

      【讨论】:

        【解决方案4】:
        1. 通过以下代码获取所有窗口处理程序。 设置 windowHandleSet = driver.getWindowHandles();
        2. 在窗口处理程序集中循环,切换到它们中的每一个。 driver.switchTo().window(windowHandleStr);
        3. 运行命令 Ctrl+数字在同一 Firefox 窗口中的不同选项卡之间切换。 WebElement bodyEle = driver.findElement(By.tagName("body")); bodyEle.sendKeys(Keys.CONTROL + "1");

        http://www.dev2qa.com/open-multiple-windows-tabs-in-selenium-webdriver/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-07
          • 1970-01-01
          • 2017-06-28
          相关资源
          最近更新 更多