【问题标题】:How to verify whether new tab opened or not in selenium webdriver?如何验证是否在 selenium webdriver 中打开了新选项卡?
【发布时间】:2014-06-06 18:41:54
【问题描述】:

我有一种情况,我必须检查单击链接后是否打开了新选项卡。如果标签打开,我也想检查标题。

有没有人对此有任何想法。

【问题讨论】:

    标签: selenium


    【解决方案1】:

    尝试切换到新标签页,然后验证页面是否正确。

    在 Java 中它可能看起来像:

    //get window handlers as list
    List<String> browserTabs = new ArrayList<String> (driver.getWindowHandles());
    //switch to new tab
    driver.switchTo().window(browserTabs .get(1));
    //check is it correct page opened or not (e.g. check page's title)
    //...
    //then close tab and get back
    driver.close();
    driver.switchTo().window(browserTabs.get(0))
    

    【讨论】:

    • 感谢您的解决方案,但它对我不起作用。即使等待一分钟,它也会给 browsertab.size =1。
    • 我的错误。我没有测试就发布了代码。尝试第二个答案(由 Jordan Silva 提供)的解决方案 stackoverflow.com/questions/12729265/… 它对我有用。
    • 感谢您的解决方案,如果我有任何问题,我会尽力告诉您
    【解决方案2】:

    C# 也一样;这是经过测试的,无论链接是在新选项卡还是新窗口中打开都可以使用。

    var browserTabs = driver.WindowHandles;            
    driver.SwitchTo().Window(browserTabs[1]);
    
    //check is it correct page opened or not (e.g. check page's title or url, etc.)
    // ...
    //close tab and get back
    driver.Close();
    driver.SwitchTo().Window(browserTabs[0]);
    

    希望这对遇到此主题的任何人有所帮助。

    【讨论】:

      【解决方案3】:

      使用等待没有打开标签以确保打开新标签

      (new WebDriverWait(driver, 30)).until(ExpectedConditions.numberOfWindowsToBe(2));
      

      然后切换到新标签

      protected void switchTabsUsingPartOfUrl(String platform) {
          String currentHandle = null;
          try {
              final Set<String> handles = driver.getWindowHandles();
              if (handles.size() > 1) {
                  currentHandle = driver.getWindowHandle();
              }
              if (currentHandle != null) {
                  for (final String handle : handles) {
                      driver.switchTo().window(handle);
                      if (currentUrl().contains(platform) && !currentHandle.equals(handle)) {
                          break;
                      }
                  }
              } else {
                  for (final String handle : handles) {
                      driver.switchTo().window(handle);
                      if (currentUrl().contains(platform)) {
                          break;
                      }
                  }
              }
          } catch (Exception e) {
              System.out.println("Switching tabs failed");
          }
      }
      

      调用该方法并传递参数一个你想切换到的标签的url子串

      driver.getTitle().equals("Title");
      

      然后验证页面标题

      【讨论】:

        【解决方案4】:

        如果您在 Groovy 中进行测试自动化,这将对您有所帮助

        def browserTabs = driver.getWindowHandles()
        driver.switchTo().window(browserTabs[1])
        assert //Validate your new page title//
        

        【讨论】:

          【解决方案5】:

          您可以使用下面的方法来实现所需的等待,直到标签完全加载。

            public static void switchTabs(WebDriver driver, int expectedWindowsCount,int SwitchtoWindow) throws Exception {
              (new WebDriverWait(driver, 30)).until(ExpectedConditions.numberOfWindowsToBe(expectedWindowsCount));
              ArrayList<String> tabs2 = new ArrayList<String>(driver.getWindowHandles());
              driver.switchTo().window(tabs2.get(SwitchtoWindow));
          }
          

          该方法将检查有多少活动窗口处理程序可用,并等待所需的处理程序出现,然后切换到选项卡。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-07-06
            • 1970-01-01
            • 2015-07-10
            • 2013-06-18
            • 2016-04-22
            • 2013-07-07
            • 1970-01-01
            相关资源
            最近更新 更多