• 自动化测试 selenium+Junit 总结知识


    Selenium 自动化测试

    什么是selenium?selenium的原理是什么?

    手工测试、人工测试,随着功能的增加,版本的不多更新,仍然需要对旧功能进行测试,自动化测试就需要对一部分手工测试进行替代,提高效率,selenium就是一个web UI自动化测试工具。

    浏览器驱动 WebDriver + Selenium 脚本 + 浏览器 可以实现对网页的完整自动化测试

    selenium的原理

    在这里插入图片描述

    Selenium 自动化测试的流程是什么?

    1)使用Java ,在maven 引入 selenium 依赖,同时配置好 WebDriver 浏览器驱动的环境

    2) selenium 定位元素

    ​ css选择器 driver.findElement(By.cssSelector())

    ​ xpath driver.findElement(By.XPath())

    1. 定位元素后对元素进行操作,click、sendKeys、 clear、submit、getText、getAttribute

    注意点:在selenium获取元素的时候,可能会因为代码执行的太快,页面还没有渲染完,导致元素还没有加载好,最终获取元素异常,获取不到。

    那么selenuim使用几种等待的方式,来保证一定能获取到元素

    1)强制等待

    Thread.sleep(), 让当前线程进入到睡眠状态,程序停下来,等待页面渲染好,但是这个时间我们不能把握,会造成时间上的浪费,比如说一个用例停1s,一百个用例就停100s,极大的浪费时间

    2)隐式等待

    driver.manage().timouts().implicityWait(Duration)

    在规定的时间内,轮询等待元素,一但出现立刻结束,节省了很多时间。隐式等待的作用域是WebDriver的整个生命周期中,所有的定位元素都要进行轮询,直到quit释放驱动。

    3)显式等待

    可以针对某一个元素进行等待,极大的节省时间,缺点就是写法较为复杂

    1、创建一个WebDriverWait(驱动对象,等待时间)

    2、调用util方法,参数是ExpectedConditions 类,可以指定某个元素满足某个条件结束等待,否则时间到了抛出异常

    Selnium还有一些其他的操作

    1)跳转页面

    2)前进后退

    3)系统的警告弹窗、输入弹窗

    4)模拟鼠标键盘

    5)选择下拉框

    6)文件上传

    7)屏幕截图

    Selenium 如何定位动态元素?

    1、如果id是动态的,定位时那就不要用id定位。用其他方式定位

    2、还有一种情况就是这个元素一会在页面上方,一会在下方,飘忽不定的动态元素,
    那就根据元素属性定位(元素的 tag、name的属性是不会变的,动的只是 class 属性和 styles 属性

    Junit 测试框架

    注解

    @Test 标在一个方法上面,表示一个测试用例

    @BeforeEach , 每一个用例执行前都会执行一遍

    @BeforeAll 静态表示 , 所有的用例执行之前只执行一次

    @AfterEach , 每一个用例执行后都会执行一遍

    @AfterAll 静态表示 ,所有的用例执行之后只执行一次

    断言

    assertEquals(expect,actual) 判断预期的文本是否与实际文本一直,返回值是true、false

    assertNotEquals

    assertTrue 里面方式的是表达式,参数是boolean类型的

    assertFalse

    assertNull 判断是否是null,返回值是true、false

    assertNotNull

    执行顺序

    Junit的默认执行顺序是不确定的,官方文档没有明确,我们可以用junit中的注解来设置测试用例的执行顺序

    @Order(1) 执行顺序根据标注的数字,从小到大一次执行用例

    测试套件

    @TestCase

    @SelectPackages 执行包中的所有测试用例

    @TestCase

    @SelectClass 执行类中的所有测试用例

    参数化

    单参数

    @ParameterizedTest

    @ValueSource(ints = {1,2,3,4,})

    多参数

    @CsvSource(value={“1,2,4”,“2,3,4”})

    或者

    @CsvFileSource ( value = “”) 导入 csv excel表格形式的文件

    动态参数

    @MethodSource(“”)参数是数据来源的方法名,如果不指定数据来源,默认找同名的静态方法

    使用Stream流的方式来进行接收和传递

    @ParameterizedTest
    @MethodSource("methodDemo")
    void autoDemo(){
        System.out.println(x);
    }
    
    // 单个动态参数传递
    static Stream<String> methodDemo(){
        return Stream.of("zhansgan","lisi","wangwu");
    }
    
    // 多个动态参数传递
    statci String<Argements> methodDemo1(){}
        return Stream.of(Arguments.arguments("lisi","20"),
                         Arguments.arguments("wawang","18"),
                         Arguments.arguments("chenli","11")
                        )
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    kafka的“直接内存映射技术”,有没有内存修改数据的问题?
    【RocketMQ】消息的刷盘机制
    CentOS 7.6基于Nginx静态服务器搭建个人网站
    深入探索Docker数据卷:实现容器持久化存储的完美方案(上)
    《uni-app》表单组件-Checkbox组件
    10-27 maven概念
    支付通道被黑客攻击
    ubuntu下vscode+cmake实现gtest(cmake引入gtest,glog)
    配置SSH免密登录(CentOS 7.9操作系统)
    【运维 监控】Grafana + Prometheus,监控Linux
  • 原文地址:https://blog.csdn.net/rain67/article/details/133585169