【问题标题】:Get title of window without switching in selenium webdriver在不切换 selenium webdriver 的情况下获取窗口标题
【发布时间】:2014-09-10 08:10:43
【问题描述】:

有什么方法可以在不进行任何 selenium 切换的情况下获取窗口标题?

目前我正在使用以下代码:

public boolean switchToWindowByTitle(String title){
    String currentWindow = driver.getWindowHandle(); 
    Set<String> availableWindows = driver.getWindowHandles(); 
    if (!availableWindows.isEmpty()) { 
         for (String windowId : availableWindows) {
              String switchedWindowTitle=driver.switchTo().window(windowId).getTitle();
              if ((switchedWindowTitle.equals(title))||(switchedWindowTitle.contains(title))){ 
                  return true; 
              } else { 
                driver.switchTo().window(currentWindow); 
              } 
          } 
     } 
     return false;
}

【问题讨论】:

  • 不,没有办法做到这一点。如果你想得到窗口标题,那么它应该出现在那里。
  • '好的。 driver.getWindowHandles() 是否按它们出现在页面(层次结构)上的顺序返回所有窗口处理程序?'
  • 您是否有多个标签并且想要获取它们的标题?
  • 没有多个标签。在应用程序中,如果用户在子窗口之外单击,我们有额外的功能会关闭所有子窗口。当我们迭代一组窗口处理程序时也会发生同样的事情。因此,我们正在寻找其他方法来做同样的事情。

标签: selenium-webdriver window-handles


【解决方案1】:

Page Title&lt;title&gt; 标记,出现在浏览器窗口的顶部,该窗口是&lt;header&gt; 部分HTML DOM 的一部分&lt;html&gt;

所以Selenium 驱动的WebDriver 需要在特定的浏览上下文 上有focus 以提取页面标题。 p>

其中Window Handle 是一个唯一标识符,它保存所有窗口的地址并可以返回字符串值。所有的浏览器都会有一个独特的窗口句柄。这个getWindowHandles() 函数有助于检索所有窗口的句柄。

所以Selenium 驱动的WebDriver 可以从浏览上下文 收集窗口句柄,即使它们上没有单独的focus


结论

因此,如果不切换到特定的Window / TAB不可能获得窗口/选项卡的标题。

【讨论】:

    【解决方案2】:

    本准则将达到目的。调用这个函数如下 swithToWindow("窗口名称");

    public static Boolean switchToWindow(String title) {
        String Parent_window = driver.getWindowHandle();
        Set<String> handles = driver.getWindowHandles();
        for(String handle : handles) {
            driver.switchTo().window(handle);
            if (driver.getTitle().equalsIgnoreCase(title)) {
                return true;
            }
        }
        driver.switchTo().window(Parent_window);
        return false;
    }
    

    【讨论】:

    • 这与 OP 所要求的相反:如何切换窗口。
    【解决方案3】:
            ArrayList<String> tabs = new ArrayList<String> driver.getWindowHandles());
                driver.switchTo().window(tabs.get(1));
    
                String parentWindow=driver.getWindowHandle();
    
                   Set<String> windows= driver.getWindowHandles();
                   for(String child:windows){
                       try{
                       if(!child.equalsIgnoreCase(parentWindow)){
                              driver.switchTo().window(child);
                              String windowTitle=driver.getTitle();
                              if(windowTitle.equals("book My Show")){
                                  System.out.println("Window found");
    
                              }
                              else{
                                  System.out.println("no windows found");
                              }
    
                       }
                       }catch(Exception e){
                           e.printStackTrace();
                           System.out.println("");
                       }
                   }
                   driver.switchTo().window(parentWindow);
    

    } }

    【讨论】:

    • 这与 OP 已经拥有的逻辑基本相同。他要求这样做而不切换到所有窗口来获得标题。
    最近更新 更多