自动化测试 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RAIN 7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值