自动化框架

UI自动化

2018-11-14  本文已影响0人  Gloria艳

一、为什么要做自动化

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

三、界面自动化

四、变量&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']");
  }
}
上一篇下一篇

猜你喜欢

热点阅读