Selenium2学习-016-WebUI自动化实战实例-014-Se

系统 1609 0

在日常的 WebUI 自动化测试脚本编写过程中,经常需要打开新的页面,或者在多个打开的页面之间进行切换,以对页面元素进行相应的操作,以模拟用户的行为,实现 UI 的自动化测试。在过往的时间中,经常有初学 Selenium(webdriver) 的朋友问及如何选择窗口的问题,其实 Selenium 已经给我们提供的了相应的方法去解决这个问题。解决思路如下:

1、通过 webdriver.getWindowHandles() 获取所有已打开窗口的信息 Set<String>

2、遍历上述信息,并切换至对应的窗口

3、通常通过 URL 或者 title 判断是否为期望的窗口,若是,则进行相应的后续操作;否,则舍弃,继续遍历(若还有未遍历的)

4、若未找到对应的窗口,则对应的自动化测试用例脚本失败,通过 TestNG 的 Assert.fail 方法报告失败原因(也可以自己定义)

通过上面的解决思路可以看出,选择窗口最常用的有两种方法(1、URL;2、title)。此文以易迅网的使用向导(购物流程、在线支付)为实例进行现实说法。

闲话少述,话归正传,小二上码。。。敬请各位小主参阅,希望能对您在日常的 WebUI 自动化脚本编写有一定的启发和帮助。若有不足或错误之处,敬请大神指正,不胜感激!

        
            1
        
        
          /**
        
        
            2
        
        
           * Aaron.ffp Inc.


        
        
            3
        
        
           * Copyright (c) 2004-2015 All Rights Reserved.


        
        
            4
        
        
          */
        
        
            5
        
        
          package
        
        
           main.aaron.demo.window;


        
        
            6
        
        
            7
        
        
          import
        
        
           main.aaron.sele.core.TestCase;


        
        
            8
        
        
            9
        
        
          import
        
        
           org.openqa.selenium.By;


        
        
           10
        
        
          import
        
        
           org.testng.Assert;


        
        
           11
        
        
          import
        
        
           org.testng.annotations.Test;


        
        
           12
        
        
          import
        
        
           org.testng.annotations.AfterClass;


        
        
           13
        
        
           14
        
        
          /**
        
        
           15
        
        
           * 


        
        
           16
        
        
           * 
        
        
          @author
        
        
           Aaron.ffp


        
        
           17
        
        
           * 
        
        
          @version
        
        
           V1.0.0: autoSeleniumDemo main.aaron.demo.window SwitchWindow.java, 2015年6月19日 下午11:20:12 Exp $


        
        
           18
        
        
          */
        
        
           19
        
        
          public
        
        
          class
        
         SwitchWindow 
        
          extends
        
        
           TestCase{


        
        
           20
        
        
          private
        
        
          final
        
         String baseUrl = "http://www.yixun.com/"
        
          ;


        
        
           21
        
        
           22
        
        
          /**
        
        
           23
        
        
               * switch window demo 1 : by page URL


        
        
           24
        
        
               * 


        
        
           25
        
        
               * 
        
        
          @author
        
        
           Aaron.ffp


        
        
           26
        
        
               * 
        
        
          @version
        
        
           V1.0.0: autoSeleniumDemo main.aaron.demo.window SwitchWindow.java testSwitchWindow_01, 2015年6月22日 下午12:58:32 Exp $


        
        
           27
        
        
               *


        
        
           28
        
        
          */
        
        
           29
        
        
              @Test


        
        
           30
        
        
          public
        
        
          void
        
        
           testSwitchWindow_01(){


        
        
           31
        
                 String url = "http://st.yixun.com/help/index.htm"
        
          ;


        
        
           32
        
        
           33
        
        
          try
        
        
           {


        
        
           34
        
        
          this
        
        .webdriver.get(
        
          this
        
        
          .baseUrl);


        
        
           35
        
        
           36
        
        
          //
        
        
           click link text of how to shopping
        
        
           37
        
        
          this
        
        .webdriver.findElement(By.linkText("怎样购物"
        
          )).click();


        
        
           38
        
        
           39
        
        
          //
        
        
           refresh the page. you can annotation this, because it's not necessary when network is good


        
        
           40
        
        
          //
        
        
                      this.webdriver.navigate().refresh();


        
        
           41
        
        
           42
        
        
          //
        
        
           switch to the correct page, and return webdriver
        
        
           43
        
        
          this
        
        .webdriver = 
        
          this
        
        
          .switchPageByUrl(url);


        
        
           44
        
        
           45
        
        
          //
        
        
           get actual assertion text
        
        
           46
        
                     String shop = 
        
          this
        
        .webdriver.findElement(By.cssSelector(".mod_hd"
        
          )).getText();


        
        
           47
        
        
           48
        
        
          //
        
        
           assert
        
        
           49
        
                     Assert.assertEquals(shop, "购物流程"
        
          );


        
        
           50
        
        
           51
        
        
          //
        
        
           close window if current URL is not expected, and get expected URL
        
        
           52
        
        
          this
        
        
          .getUrl(url);


        
        
           53
        
                 } 
        
          catch
        
        
           (Exception e) {


        
        
           54
        
        
                      Assert.fail(e.getMessage());


        
        
           55
        
        
                      e.printStackTrace();


        
        
           56
        
        
                  }


        
        
           57
        
        
              }


        
        
           58
        
        
           59
        
        
          /**
        
        
           60
        
        
               * switch window demo 1 : by page title


        
        
           61
        
        
               * 


        
        
           62
        
        
               * 
        
        
          @author
        
        
           Aaron.ffp


        
        
           63
        
        
               * 
        
        
          @version
        
        
           V1.0.0: autoSeleniumDemo main.aaron.demo.window SwitchWindow.java testSwtichWindow_02, 2015-6-22 12:59:27 Exp $


        
        
           64
        
        
               *


        
        
           65
        
        
          */
        
        
           66
        
        
              @Test


        
        
           67
        
        
          public
        
        
          void
        
        
           testSwtichWindow_02(){


        
        
           68
        
                 String title = "在线支付 - 易迅网"
        
          ;


        
        
           69
        
        
           70
        
        
          try
        
        
           {


        
        
           71
        
        
          this
        
        .webdriver.get(
        
          this
        
        
          .baseUrl);


        
        
           72
        
        
           73
        
        
          //
        
        
           click link text of how to shopping
        
        
           74
        
        
          this
        
        .webdriver.findElement(By.linkText("在线支付"
        
          )).click();


        
        
           75
        
        
           76
        
        
          //
        
        
           refresh the page. you can annotation this, because it's not necessary when network is good


        
        
           77
        
        
          //
        
        
                      this.webdriver.navigate().refresh();


        
        
           78
        
        
           79
        
        
          //
        
        
           switch to the correct page, and return webdriver
        
        
           80
        
        
          this
        
        .webdriver = 
        
          this
        
        
          .switchPageByUrl(title);


        
        
           81
        
        
           82
        
        
          //
        
        
           get actual assertion text
        
        
           83
        
                     String webpay = 
        
          this
        
        .webdriver.findElement(By.cssSelector(".mod_hd"
        
          )).getText();


        
        
           84
        
        
           85
        
        
          //
        
        
           assert
        
        
           86
        
                     Assert.assertEquals(webpay, "在线支付"
        
          );


        
        
           87
        
        
           88
        
        
          //
        
        
           close window if current URL is not expected, and get expected URL
        
        
           89
        
        
          this
        
        .getUrl(
        
          this
        
        
          .webdriver.getCurrentUrl().toString());


        
        
           90
        
                 } 
        
          catch
        
        
           (Exception e) {


        
        
           91
        
        
                      Assert.fail(e.getMessage());


        
        
           92
        
        
                      e.printStackTrace();


        
        
           93
        
        
                  }


        
        
           94
        
        
              }


        
        
           95
        
        
           96
        
        
              @AfterClass


        
        
           97
        
        
          public
        
        
          void
        
        
           afterClass(){


        
        
           98
        
        
          this
        
        
          .webdriver.close();


        
        
           99
        
        
          this
        
        
          .webdriver.quit();


        
        
          100
        
        
              }


        
        
          101
        
         }
      
WebDrvier 选择窗口实例脚本演示源码(基于易迅网用户向导)

脚本运行结果如下所示:

通过页面 URL 选择窗口的方法,若当前已开窗口的数量小于 2 或无匹配的窗口,则均返回最后一个窗口

        
           1
        
        
          /**
        
        
           2
        
        
               * Switch window by page URL. Return the last if number of windows lower than 2 or not window's URL can matched.


        
        
           3
        
        
               * 


        
        
           4
        
        
               * 
        
        
          @author
        
        
           Aaron.ffp


        
        
           5
        
        
               * 
        
        
          @version
        
        
           V1.0.0: autoSeleniumDemo main.aaron.sele.core SeleniumCore.java switchPageByUrl, 2015-6-19 23:15:15 Exp $


        
        
           6
        
        
               * 


        
        
           7
        
        
               * 
        
        
          @param
        
        
           url : page URL


        
        
           8
        
        
               * 
        
        
          @return
        
        
           WebDriver


        
        
           9
        
        
          */
        
        
          10
        
        
          public
        
        
           WebDriver switchPageByUrl(String url){


        
        
          11
        
        
          //
        
        
           define variable to store current page title
        
        
          12
        
                 String currentUrl = ""
        
          ;


        
        
          13
        
        
          14
        
                 url = "".equals(url)||(url == 
        
          null
        
        ) ? ""
        
          :url;


        
        
          15
        
        
          16
        
        
          //
        
        
           get all windows
        
        
          17
        
                 Set<String> windows = 
        
          this
        
        
          .webdriver.getWindowHandles();


        
        
          18
        
        
          19
        
        
          if
        
         (windows.size() < 2
        
          ) {


        
        
          20
        
        
          return
        
        
          this
        
        
          .webdriver;


        
        
          21
        
        
                  }


        
        
          22
        
        
          23
        
        
          try
        
        
           {


        
        
          24
        
        
          for
        
        
           (String window : windows) {


        
        
          25
        
        
          //
        
        
           change window
        
        
          26
        
        
          this
        
        
          .webdriver.switchTo().window(window);


        
        
          27
        
        
          28
        
        
          //
        
        
           refresh the page. you can annotation this, because it's not necessary when network is good


        
        
          29
        
        
          //
        
        
                          this.webdriver.navigate().refresh();
        
        
          30
        
        
          31
        
                         Thread.sleep(3000
        
          );


        
        
          32
        
        
          33
        
        
          //
        
        
           get page url
        
        
          34
        
                         currentUrl = 
        
          this
        
        
          .webdriver.getCurrentUrl().toString();


        
        
          35
        
        
          36
        
        
          //
        
        
           verify the current page is expect or not, return this if correct
        
        
          37
        
        
          if
        
        
           (currentUrl.startsWith(url)) {


        
        
          38
        
        
          return
        
        
          this
        
        
          .webdriver;


        
        
          39
        
        
                          }


        
        
          40
        
        
                      }


        
        
          41
        
                 } 
        
          catch
        
        
           (Exception e) {


        
        
          42
        
        
                      e.printStackTrace();


        
        
          43
        
        
                  }


        
        
          44
        
        
          45
        
        
          return
        
        
          this
        
        
          .webdriver;


        
        
          46
        
             }
      
通过页面 URL 选择窗口

通过页面 title 选择窗口的方法,若当前已开窗口的数量小于 2 或无匹配的窗口,则均返回最后一个窗口

        
           1
        
        
          /**
        
        
           2
        
        
               * Switch window by page title. Return the last if number of windows lower than 2 or not window's title can matched.


        
        
           3
        
        
               * 


        
        
           4
        
        
               * 
        
        
          @author
        
        
           Aaron.ffp


        
        
           5
        
        
               * 
        
        
          @version
        
        
           V1.0.0: autoSeleniumDemo main.aaron.sele.core SeleniumCore.java switchPageByTitle, 2015-6-19 23:10:34 Exp $


        
        
           6
        
        
               * 


        
        
           7
        
        
               * 
        
        
          @param
        
        
           title : page title


        
        
           8
        
        
               * 


        
        
           9
        
        
               * 
        
        
          @return
        
        
           WebDriver


        
        
          10
        
        
          */
        
        
          11
        
        
          public
        
        
           WebDriver switchPageByTitle(String title){


        
        
          12
        
        
          //
        
        
           define variable to store current page title
        
        
          13
        
                 String currentTitle = ""
        
          ;


        
        
          14
        
        
          15
        
                 title = "".equals(title)||(title == 
        
          null
        
        ) ? ""
        
          :title;


        
        
          16
        
        
          17
        
        
          //
        
        
           get all windows
        
        
          18
        
                 Set<String> windows = 
        
          this
        
        
          .webdriver.getWindowHandles();


        
        
          19
        
        
          20
        
        
          if
        
         (windows.size() < 2
        
          ) {


        
        
          21
        
        
          return
        
        
          this
        
        
          .webdriver;


        
        
          22
        
        
                  }


        
        
          23
        
        
          24
        
        
          try
        
        
           {


        
        
          25
        
        
          for
        
        
           (String window : windows) {


        
        
          26
        
        
          //
        
        
           change window
        
        
          27
        
        
          this
        
        
          .webdriver.switchTo().window(window);


        
        
          28
        
        
          29
        
                         Thread.sleep(3000
        
          );


        
        
          30
        
        
          31
        
        
          //
        
        
           get page title
        
        
          32
        
                         currentTitle = 
        
          this
        
        
          .webdriver.getTitle().toString();


        
        
          33
        
        
          34
        
        
          //
        
        
           verify the current page is expect or not, return this if correct
        
        
          35
        
        
          if
        
        
           (currentTitle.equals(title)) {


        
        
          36
        
        
          return
        
        
          this
        
        
          .webdriver;


        
        
          37
        
        
                          }


        
        
          38
        
        
                      }


        
        
          39
        
                 } 
        
          catch
        
        
           (Exception e) {


        
        
          40
        
        
                      e.printStackTrace();


        
        
          41
        
        
                  }


        
        
          42
        
        
          43
        
        
          return
        
        
          this
        
        
          .webdriver;


        
        
          44
        
             }
      
通过页面 title 选择窗口

PS:上述用例代码中有调用 getUrl(String url) 方法,此方法的主要用途是关闭无效的网页窗口,释放系统资源,具体的方法源码敬请参阅: Selenium2学习-015-WebUI自动化实战实例-013-通过 URL 关闭多余的已开浏览器窗口

 

至此, WebUI 自动化功能测试脚本 第 014-Selenium 窗口选择 顺利完结,希望此文能够给初学 Selenium 的您一份参考。

最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^

 

 

Selenium2学习-016-WebUI自动化实战实例-014-Selenium 窗口选择


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论