zoukankan      html  css  js  c++  java
  • WebDriver初探(登录和第一个case)

    今天使用WebDriver对服务端后台进行一个初步访问,实现登录、菜单跳转和数据初步判断的小功能。

    服务端使用EXTJS的技术自动生成HTML,这种架构非常的不适合自动化测试,定位元素非常的困难。不过今天我们只是进行一下小尝试,不涉及深入的知识。

    好了,废话不说了,上代码

     1 package com.xws.support.ly;
     2 
     3 import org.openqa.selenium.By;
     4 import org.openqa.selenium.WebDriver;
     5 import org.openqa.selenium.WebElement;
     6 import org.openqa.selenium.chrome.ChromeDriver;
     7 
     8 public class Login {
     9     private String userName = "";
    10     private String passWord = "";
    11     private String identifying = "";
    12     private String url = "";
    13     WebDriver driver = new ChromeDriver();
    14     WebElement user = null;
    15     WebElement pass=null;
    16     WebElement identifyingcode = null;
    17 
    18     
    19     Login(String userName,String PassWord,String identifying,String url){
    20         this.userName= userName;
    21         this.passWord = PassWord;
    22         this.identifying = identifying;
    23         this.url = url;
    24     }
    25     
    26     public WebDriver SystemLogin(){
    27         //通过chrome打开测试地址
    28         driver.get("http://172.23.69.144:8888/management/login.jsp");
    29         
    30         //通过By.name方法获取登录名、密码、验证码元素
    31         user = driver.findElement(By.name("userName"));
    32         pass = driver.findElement(By.name("password"));
    33         identifyingcode = driver.findElement(By.name("yzm"));
    34         
    35         //将登录名、密码、验证码文本框清空
    36         user.clear();
    37         pass.clear();
    38         identifyingcode.clear();
    39         
    40         //输入登录名、密码、验证码
    41         user.sendKeys(userName);
    42         pass.sendKeys(passWord);
    43         identifyingcode.sendKeys(identifying);
    44         
    45         //进行登录
    46         driver.findElement(By.xpath("//a[contains(@href,'login')]")).click();
    47         
    48         return driver;
    49     }
    50 }


    上述代码完成了页面登录的操作(验证码这里我更改了servlet,输入任意的字符都验证通过)

     1 public class OpenMenu {
     2 
     3     WebElement menuUrl=null;
     4     List<WebElement> list = null;
     5         
     6     public void getMenu(WebDriver driver,String menuText){
     7         //将所有的tree图片元素放入list中
     8         list = driver.findElements(By.cssSelector("img.x-tree-elbow-img.x-tree-elbow-plus.x-tree-expander"));
     9         
    10         //循环list,将所有菜单全部展开
    11         for(int i=0;i<list.size();i++){
    12             
    13             try {
    14                 //这里讲每次展开菜单做一个等待,以避免菜单未加载完成导致异常
    15                 Thread.sleep(1000);
    16             } catch (InterruptedException e) {
    17                 e.printStackTrace();
    18             }
    19             list.get(i).click();
    20         }
    21         try{
    22             //在这里捕获一下未找到菜单的异常,如果没找到这个菜单,则提示菜单无法找到
    23             driver.findElement(By.xpath("//span[text()='" + menuText + "']/parent::div")).click();
    24         }catch(NoSuchElementException e){
    25             System.out.println("对不起,这个菜单无法找到: " + menuText);
    26             e.printStackTrace();
    27         }
    28     }
    29 }

    上述代码完成了展开所有菜单,并跳转到相应菜单的操作

     1 public class ContrastData {
     2     WebDriver driver = null;
     3     List<WebElement> list = null;
     4     JavascriptExecutor jse=(JavascriptExecutor)driver;
     5     String term = "";
     6     
     7     ContrastData(WebDriver driver,String term){
     8         this.driver=driver;
     9         this.term= term;
    10     }
    11     
    12     public void DataContrast(){
    13         //这里通过调用JS的方式,将name为term的下拉条进行点击(这里不是select)
    14         jse.executeScript("window.document.getElementsByName('"+term+"')[0].click()");
    15         
    16         try {
    17             //设置等待时间,等待隐藏元素展示完整
    18             Thread.sleep(2000);
    19         } catch (InterruptedException e) {
    20             e.printStackTrace();
    21         }
    22         //用XPATH匹配已展示的lable元素,当text为对应值时,进行单击选择
    23          driver.findElement(By.xpath("//*[text()='审核成功']")).click();
    24         /*
    25          * 通过BYID方式,找到检索图片,并进行click
    26          * 这里我要说明一下,这个并非button元素,所以不是submit
    27          * 这个元素是动态加载,不能直接用byid方式,我在这里只是为了做而做,实际项目中不能用动态加载的ID来定位元素
    28          */
    29          driver.findElement(By.id("button-1108-btnIconEl")).click();
    30             try {
    31                 //设置等待时间,等待检索结果展示完整
    32                 Thread.sleep(2000);
    33             } catch (InterruptedException e) {
    34                 e.printStackTrace();
    35             }
    36          //将显示出来的审核状态元素,全部放入list中
    37         list = driver.findElements(By.cssSelector("div.x-grid-cell-inner"));
    38         boolean test = true;
    39         for(int i=0;i<list.size();i++){
    40             
    41             //遍历判断,如果有状态为非审核成功的,则测试不通过
    42             if(!(list.get(i).equals("审核成功"))){
    43                 test=false;
    44             }
    45         }
    46         if(!test){
    47             System.out.println("测试不通过");
    48         }else{
    49             System.out.println("测试通过");
    50         }
    51     }
    52 }

    上述代码已经完成了一个简单的case,可以看到  我们检查通过‘审核成功’状态检索的数据是否都是审核成功的,如果是则打印通过,否则打印不通过。

    好了,这只是个玩具code,真实的自动化平台,对元素定位,用例执行,结果输出全部需要进行封装,而不是像这样写,非常难以维护。

  • 相关阅读:
    struts2 DMI
    MFC添加背景图片
    c++ 副本构造器
    climits
    Qt中的qreal
    Http概述(一)
    重构学习-重构原则
    QDir的mkdir和mkpath区别
    Qt学习笔记网络(一)
    Qt5 新特性
  • 原文地址:https://www.cnblogs.com/wisdom-1983/p/5027396.html
Copyright © 2011-2022 走看看