UI自动化

作者: Gloria艳 | 来源:发表于2018-11-14 19:56 被阅读0次

    一、为什么要做自动化

    二、适合自动化测试的情况

    三、界面自动化

    四、变量&if判断&打印

    package com.guoyasoft.autoUI.guoya_1810;
    
    import com.guoyasoft.autoUI.common.BaseUI;
    import org.openqa.selenium.By;
    import org.testng.annotations.Test;
    
    /**
     * @program: guoya-test
     * @description:
     * @author: guoya
     * @create: 2018-11-14 09:44
     **/
    public class GuoyaLoging extends BaseUI {
      //全局变量 写在class 类里面 public公众的 意思后面所有都可以引用的
      //格式:变量类型(常见的三种类型:文本、数字、布尔值) 别名=变量内容
      public String username="guoy88";
      public String realname="xyz";
      public String passwoed="qweasd";
      public String phone="18619988668";
      public String age="26";
    
        @Test
        public void signup () {
        driver.get("http://47.98.226.232:8080/guoya-medium/jsp/user/signUp.jsp");
        driver.findElement(By.xpath("//input[@id='userName']")).clear();
        driver.findElement(By.xpath("//input[@id='userName']")).sendKeys(username);
        driver.findElement(By.xpath("//input[@id='realName']")).sendKeys(realname);
        driver.findElement(By.xpath("//input[@id='password']")).sendKeys(passwoed);
        driver.findElement(By.xpath("//input[@id='password2']")).sendKeys(passwoed);
        driver.findElement(By.xpath("//input[@id='phone']")).sendKeys(phone);
        driver.findElement(By.xpath("//input[@id='age']")).sendKeys(age);
        driver.findElement(By.xpath("//input[@id='checkCode']")).sendKeys("1234");
        driver.findElement(By.xpath("//input[@id='submitBtn']")).click();
        driver.switchTo().alert().accept();
        /*
        if 判断
        getPageSource 获取页面源代码  contains 包含 contains的结果只有两种
        所有用布尔值 用变量 result结果 存起来 供后面判断使用
        计算机的逻辑是先赋值 再考虑是否引入变量
        */
        boolean result = driver.getPageSource().contains("登录界面");
         //== 判断值是否相等
        if (result == true) {
          //打印
          System.out.println("用户注册成功");
        }
        //else 否则
        else {
          System.out.println("用户注册失败");
        }
      }
    
        @Test
        public void login () {
        /*
        局部变量 写在方法里面 ()代表方法  没有小括号是命令
        public String username="guoy88";
        public String passwoed="qweasd";
        */
          driver.get("http://47.98.226.232:8080/guoya-medium/jsp/user/login.jsp");
          driver.findElement(By.xpath("//input[@id='userName']")).clear();
          driver.findElement(By.xpath("//input[@id='userName']")).sendKeys(username);
          driver.findElement(By.xpath("//input[@id='password']")).sendKeys(passwoed);
          driver.findElement(By.xpath("//input[@id='checkCode']")).sendKeys("12345");
          driver.findElement(By.xpath("//input[@id='loginBtn']")).click();
      }
    }
    

    五、循环

    1、for循环
    import com.guoyasoft.autoUI.common.BaseUI;
    public class GuoyaLoging extends BaseUI {
    public void login () {
        /*for 如果  设置循环 起始值 最大值(最小值) 增量(减量)
        格式:for (int i=起始值小;i<=最大值;i++){} 
            或者for(int i=起始值大;i>=最小值;i--){}
        i++ 的意思是i=i+1     i-- 的意思是i=i-1
        */
        for (int i = 0; i <= 10; i++) {
          //打印   文本和变量之间用 + 连接
          System.out.println("循环操作次数" + i);
          driver.get("http://47.98.226.232:8080/guoya-medium/jsp/user/login.jsp");
          driver.findElement(By.xpath("//input[@id='userName']")).clear();
          driver.findElement(By.xpath("//input[@id='userName']")).sendKeys(username);
          driver.findElement(By.xpath("//input[@id='password']")).sendKeys(passwoed);
          driver.findElement(By.xpath("//input[@id='checkCode']")).sendKeys("12345");
          driver.findElement(By.xpath("//input[@id='loginBtn']")).click();
        }
      }
    }
    
    2、while循环

    (1)数值型
    for的循环很相似,关键就是增量(减量)一定要放在打印的后面

    import com.guoyasoft.autoUI.common.BaseUI;
    public class GuoyaLogin3 extends BaseUI {
    /* while循环 可以是数值型  最小值 ,最大值,增量,判断条件
          格式: int i=0;
                while(i<=9){
                i++
                }
          补充  如果增量i++放在while里打印内容的前面,则执行的时候直接从i+1开始
                如果想要从起始值开始,增量i++一定要放在while里打印内容的后面*/
    
    public void login () {
           int i=0;
           while(i<10) {
             //i++ 增量一定要放在打印的后面
             System.out.println("i的值"+i);
             i++;
             driver.get("http://47.98.226.232:8080/guoya-medium/jsp/user/login.jsp");
             driver.findElement(By.xpath("//input[@id='userName']")).clear();
             driver.findElement(By.xpath("//input[@id='userName']")).sendKeys(username);
             driver.findElement(By.xpath("//input[@id='password']")).sendKeys(passwoed);
             driver.findElement(By.xpath("//input[@id='checkCode']")).sendKeys("12345");
             driver.findElement(By.xpath("//input[@id='loginBtn']")).click();
           }
      }
    }
    

    输出结果

    从起始值开始
    打断点看开始执行的详细步骤
    打断点看开始执行情况
    注意:如果i++放在打印输出之前,开始执行是从起始值+1开始的,不过循环次数是不会改变的
    打印输出结果
    原因1
    原因2
    (2)判断条件
    while还可以用于判断,条件成立则一直执行循环,条件不满足就结束,所以while很容易出现死循环。
    import com.guoyasoft.autoUI.common.BaseUI;
    public class GuoyaLogin3 extends BaseUI {
    /*while还可以用于判断     条件成立则一直执行循环,条件不满足就结束
          格式: boolean result;
            //= 是赋值运算
            while(result=true){     大括号里是要循环的内容
               result=赋值
               }
          补充   boolean后面的变量result一定要赋值  */
     public void login () {
          boolean result
           while(result=true) {
             System.out.println("登录成功");
             driver.get("http://47.98.226.232:8080/guoya-medium/jsp/user/login.jsp");
             driver.findElement(By.xpath("//input[@id='userName']")).clear();
             driver.findElement(By.xpath("//input[@id='userName']")).sendKeys(username);
             driver.findElement(By.xpath("//input[@id='password']")).sendKeys(passwoed);
             driver.findElement(By.xpath("//input[@id='checkCode']")).sendKeys("12345");
             driver.findElement(By.xpath("//input[@id='loginBtn']")).click();
             result=driver.getpagessource.contains("学生查询");
           }
      }
    }
    

    六、数组

    1、一维数组

    类似csv,也是循环取值

    import com.guoyasoft.autoUI.common.BaseUI;
    public class GuoyaLogin3 extends BaseUI {
      public String passwoed="qweasd";
      //[] 是数组  =后面是值 {}  一维数组是固定长度
      public String users []={
          "ye008",
          "ye007",
          "ye006",
          "ye005",
          "ye004",
          "ye003",
          "ye002",
          "ye001",
          "ye000",
          "ye009"};
    
      public void login(){
        //for循环的内容要放在for的{}里  users.length 数组长度 
        for (int i=0; i<users.length; i++){
          System.out.println("当前数组长度"+users.length);
          System.out.println("当前i的值是"+i);
          System.out.println(users);
        driver.get("http://47.98.226.232:8080/guoya-medium/jsp/user/login.jsp");
        driver.findElement(By.xpath("//input[@id='userName']")).clear();
        driver.findElement(By.xpath("//input[@id='userName']")).sendKeys(users[i]);
        driver.findElement(By.xpath("//input[@id='password']")).sendKeys(passwoed);
        driver.findElement(By.xpath("//input[@id='checkCode']")).sendKeys("12345");
        driver.findElement(By.xpath("//input[@id='loginBtn']")).click();*/
        }
     }
    }
    
    2、二维数组
    public class Demo {
    
        //数组的特点是一旦创建了就固定了大小
      public String users [][]={
        {"hj12304","qweasd1"},
        {"hj12305","qweasd2"},
        {"hj12306","qweasd3"},
        {"hj12307","qweasd4"},
        {"hj12308","qweasd5"}
      };
      @Test
      public void demo1() {
        for (int i = 0; i < 5; i++) {
          System.out.println(users[i][0]);
          System.out.println(users[i][1]);
        }
      }
      @Test
      public void list(){
        //创建一个list列表   好处就是列表不固定,用数据时可以直接添加
        List<String> list=new ArrayList<String>();
        //列表添加数据 list.add  
        list.add("李阳");
        list.add("王维");
        System.out.println(list.get(1));
        System.out.println(list.size());
      }
      @Test
      public void map(){
        //Map 用来存储键值对数据 取数据通过键来取值
        Map<String,Integer> m=new HashMap<String, Integer>();
        m.put("李阳",21);
        m.put("王维",18);
        System.out.println("李阳的年龄是"+m.get("李阳"));
        System.out.println("王维的年龄是"+m.get("王维"));
      }
    }
    

    七、方法类型

    方法类型
    1、无参 只是引用了一个变量 值是固定的
    import com.guoyasoft.autoUI.common.BaseUI;
    public class GuoyaLogin3 extends BaseUI {
      public String passwoed="qweasd";
      public String username="ye008"; 
    
    public void login() {
        driver.get("http://47.98.226.232:8080/guoya-medium/jsp/user/login.jsp");
        driver.findElement(By.xpath("//input[@id='userName']")).clear();
        driver.findElement(By.xpath("//input[@id='userName']")).sendKeys(username);
        driver.findElement(By.xpath("//input[@id='password']")).sendKeys(passwoed);
        driver.findElement(By.xpath("//input[@id='checkCode']")).sendKeys("12345");
        driver.findElement(By.xpath("//input[@id='loginBtn']")).click();
     //声明查询的条件 这个是自己声明的,如果下面没有引用会直接提示报错
          queryuser();
          queryrealname();
          queryage();
    }
    //声明的方法
        public void queryuser () {
        driver.findElement(By.xpath("//input[@name='userName']")).clear();
        driver.findElement(By.xpath("//input[@name='userName']")).sendKeys(username);
        driver.findElement(By.xpath("//input[@type='submit']")).click();
      }
        public void queryrealname () {
        driver.findElement(By.xpath("//input[@name='userName']")).clear();
        driver.findElement(By.xpath("//input[@name='realName']")).sendKeys(realname);
        driver.findElement(By.xpath("//input[@type='submit']")).click();
      }
        public void queryage () {
        driver.findElement(By.xpath("//input[@name='realName']")).clear();
        driver.findElement(By.xpath("//input[@type='number'][1]")).sendKeys(age);
        driver.findElement(By.xpath("//input[@type='submit']")).click();
      }
    }
    

    2、封装 用方法和参数---谁使用谁赋值
    主要是用于简化代码
    例如上文中的driver.findelement(By.xpath()).sendKeys() 一直在重复输入。这种重复性太高的,可以引用参数,赋值,封装数据

    import com.guoyasoft.autoUI.common.BaseUI;
    public class GuoyaLogin3 extends BaseUI {
    
    public void login() {
     
       /* driver.get("http://47.98.226.232:8080/guoya-medium/jsp/user/login.jsp");
        driver.findElement(By.xpath("//input[@id='userName']")).clear();
        driver.findElement(By.xpath("//input[@id='userName']")).sendKeys(users[i]);
        driver.findElement(By.xpath("//input[@id='password']")).sendKeys(passwoed);
        driver.findElement(By.xpath("//input[@id='checkCode']")).sendKeys("12345");
        driver.findElement(By.xpath("//input[@id='loginBtn']")).click();*/
          //简化 
          //引用参数  然后赋值 谁引用,谁赋值 简化书写  也是封装数据
          get("http://47.98.226.232:8080/guoya-medium/jsp/user/login.jsp");
          clear("//input[@id='userName']");
          send("//input[@id='userName']","ye008");
          send("//input[@id='password']","qweasd");
          send("//input[@id='checkCode']", "12345");
          click("//input[@id='loginBtn']");
      }
    //声明一个方法 用()  括号里面是参数  参数格式:参数类型 自己起的名称(){}
     public void get(String url){
        driver.get(url);
      }
      public void clear(String clear){
        driver.findElement(By.xpath(xpath)).clear();
      }
      public void send(String xpath, String date){
        driver.findElement(By.xpath(xpath)).sendKeys(date);
      }
      public void click(String xpath){
        driver.findElement(By.xpath(xpath)).click();
     }
    }
    

    八、前端页面iframe的切换

    import com.guoyasoft.autoUI.common.BaseUI;
    public class GuoyaLogin3 extends BaseUI {
    
    public void login() {
    
          get("http://47.98.226.232:8080/guoya-medium/jsp/user/login.jsp");
          clear("//input[@id='userName']"));
          send("//input[@id='userName']", "ye008");
          send("//input[@id='password']","qweasd");
          send("//input[@id='checkCode']", "12345");
          click("//input[@id='loginBtn']");
          //打印 获取的标题
          System.out.println(driver.getTitle());
          //boolean 布尔类型 变量类型 true 真  false 假
          //获取页面源代码使用contains 方法 判断是否包含文本内容,是true 否false ,然后用布尔值变量进行存储
        boolean result=driver.getPageSource().contains("学生查询");
          //assert断言 判断预期结果与实际结果是否相等 布尔值不需要用"",文本字符串都需要加""
          //调用Assert对象.assertEquals方法 判断 实际结果,预计结果是否相等,如果不相等,打印错误 抛出异常
        Assert.assertEquals(result,true,"用户登录页面失败");
        //调用自己封装的 查询用户的方法  入参 用户名
          queryuser("ye008");
          sleep(2000);
    
          //切换iframe 窗口条件是name 或者 Id  展示窗口
          driver.switchTo().frame("result");
          //断言 查询后展示页面是否包含查询用户 断言的结果是布尔值不用""
          boolean guoya=driver.getPageSource().contains(users[i]);
          Assert.assertEquals(guoya,true);
          //打印切换后的页面 获取的标题
          System.out.println(driver.getTitle());
          //切换回默认窗口
          //driver.switchTo().defaultContent();
        }
      }
      public void get(String url){
        driver.get(url);
      }
       public void clear(String clear){
        driver.findElement(By.xpath(xpath)).clear();
      }
      public void send(String xpath, String date){
        driver.findElement(By.xpath(xpath)).sendKeys(date);
      }
      public void click(String xpath){
        driver.findElement(By.xpath(xpath)).click();
      }
      public void queryuser(String name){
      send("//input[@name='userName']",name);
      click("//input[@type='submit']");
      }
    }
    

    九、下拉框的查询

    package com.guoyasoft.autoUI.guoya_1810;
    
    import com.guoyasoft.autoUI.common.BaseUI;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.support.ui.Select;
    import org.testng.annotations.Test;
    
    public class GuoyaLogin4 extends BaseUI {
    
      public String  username="ye008";
      public String  password="qweasd";
      @Test
      public void login(){
        for (int i=0;i<= users.length;i++) {
          get("http://47.98.226.232:8080/guoya-medium/jsp/user/login.jsp");
          clear("//input[@name='userName']");
          send("//input[@name='userName']", username);
          send("//input[@id='password']", password);
          send("//input[@id='checkCode']", "12345");
          click("//input[@id='loginBtn']");
          queryeducation("大专");
          queryclass("提高班");
        }
      }
      public void get(String url){
        driver.get(url);
      }
      public void clear(String xpath){
        driver.findElement(By.xpath(xpath)).clear();
      }
      public void send(String xpath,String sendKeys){
        driver.findElement(By.xpath(xpath)).sendKeys(sendKeys);
      }
      public void click(String xpath){
        driver.findElement(By.xpath(xpath)).click();
      }
      public void queryeducation(String education){
        clear("//input[@type='number'][1]");
        //Select select=send("//select[@name='education']",education);
        //使用findelement 查找select元素 使用Webelement 对象声明的变量用element进行保存
        WebElement element=driver.findElement(By.xpath("//select[@name='education']"));
        //新建一个selenium 下拉框处理对象 Select进行处理下拉框 使用时需要传参 传参为定位的select下拉框
        Select select=new Select(element);
        select.selectByVisibleText(education);
        click("//input[@type='submit']");
      }
      public void queryclass(String classType){
        clear("//select[@name='education']");
        WebElement element=driver.findElement(By.xpath("//select[@name='classType']"));
        Select select=new Select(element);
        select.selectByVisibleText(classType);
        click("//input[@type='submit']");
      }
    }
    

    相关文章

      网友评论

        本文标题:UI自动化

        本文链接:https://www.haomeiwen.com/subject/nefsfqtx.html