zoukankan      html  css  js  c++  java
  • Selenium窗口切换Selenium快速入门(六)

      有时候,我们打开多个窗口,进行多窗口操作,那么窗口间该如何切换呢?

      切换的方法有两个,一个是通过窗口标题来验证,另一个是通过窗口特定的内容来验证,这两个方法都要求得到的标题或内容是唯一的。

      用到的相关方法有:

    方法 说明
    String getTitle() 返回当前窗口的标题
    String getPageSource() 获取最后加载页面的源。如果页面在加载后被修改(例如,由JavaScript),则不能保证返回的文本是修改过的页面。
    String getWindowHandle() 获得能唯一标识该驱动实例的句柄
    Set<String> getWindowHandles() 获得一组句柄,可用来遍历所有打开的窗口
    WebDriver switchTo().window(String nameOrHandle) 切换到指定窗口,如果窗口不存在,则抛出异常 NoSuchWindowException 

      首先,我们要看看窗口的切换,前面两个方法getTitle()和getPageSource()都比较好理解。

      getTitle():返回当前窗口的标题<title></title>标签之间的文本

      getPageSource():返回当前窗口的html

      getWindowHandle():返回当前窗口的句柄,句柄究竟是什么东西呢,从返回类型看,就是字符串,该字符串能唯一标识当前窗口。

      我们打印出来看看

             WebDriver driver=DriverHelper.CreateChromeDriver();
             driver.get("http://www.cnblogs.com");
             System.out.print(driver.getWindowHandle());
          driver.close();

      结果是:CDwindow-(AF044FCA260B465460C9346203D5D109),注意的是,每次运行返回的句柄都不一样。

      从结果的字符串看,括号里一共32位,估计跟UUID有关,反正我们知道Selenium中,窗口的句柄就是字符串,该字符串能够唯一标识当前窗口即可。而getWindowHandles()则返回一组句柄,下面演示一下,如何切换窗口。

       下面的例子是打开京东主页,打开家用电器的分类页,然后切换回主页。

             //得到WebDriver
             WebDriver driver=DriverHelper.CreateChromeDriver();
             driver.get("http://www.jd.com");
             
             //获得首页的标题
             String indexTitle=driver.getTitle();
             String indexWinH=driver.getWindowHandle();
             
             //点击家用电器连接,新开一个窗口
             WebElement element=driver.findElement(By.linkText("家用电器"));
             element.click();
             //等待5秒
             Thread.sleep(5000);
             //切换到主页
             driver.switchTo().window(indexWinH);

      上面是用句柄切换,之所以能用句柄切换,是因为我们打开主页的时候,知道主页的句柄,如果不知道主页句柄,我们怎么切换呢?方法有两种,一种是通过标题,另一种是通过内容,这两个方法的本质是一样的,都是用页面中独一无二的内容来区分。

      下面是用标题切换的代码

             //得到WebDriver
             WebDriver driver=DriverHelper.CreateChromeDriver();
             driver.get("http://www.jd.com");
             
             //获得首页的标题
             String indexTitle=driver.getTitle();
             //假如不知道句柄
             //String indexWinH=driver.getWindowHandle();
             
             //点击家用电器连接,新开一个窗口
             WebElement element=driver.findElement(By.linkText("家用电器"));
             element.click();
             //等待5秒
             Thread.sleep(5000);
             
             //遍历所有句柄,找到标题为indexTitle的窗口
             for(String winH: driver.getWindowHandles())
             {
                 //如果通过句柄找到的窗口的标题等于indexTitle,则切换到该窗口,并且跳出循环
                 if(driver.switchTo().window(winH).getTitle().equals(indexTitle))
                 {
                     driver.switchTo().window(winH);
                     break;
                 }
                 
             }

      如果是使用内容来区分,代码基本一致,只需要将getTitle()换成getPageSource()即可

             //如果通过句柄找到的窗口的标题等于indexTitle,则跳转到该窗口,并且跳出循环
                 if(driver.switchTo().window(winH).getTitle().equals(indexTitle))
                 {
                     driver.switchTo().window(winH);
                     break;
                 }
                 
                 //如果内容包括xxxx,则切换到该窗口
                 if(driver.switchTo().window(winH).getPageSource().contains("xxxx"))
                 {
                     driver.switchTo().window(winH);
                     break;
                 }
                 

      

      

  • 相关阅读:
    NSDate仅获取日期年月日的实现--即只要年月日,不要多余的小时分钟秒数
    iOS入门学习书籍路线(英文书籍)
    iOS开发必看的博客汇总
    Java直接插入算法
    MyEclipse汉化后问题
    Java 两个变量交换值
    Objective-C 笔记 字符串操作
    Objective-C 笔记二 类、对象和方法
    Objective-C 笔记一(HelloWorld)
    我们究竟需要什么!!?
  • 原文地址:https://www.cnblogs.com/devtester/p/8607525.html
Copyright © 2011-2022 走看看