使用掘金已经有一段时间了,但是一直没有发文章,因为看到jj上很多大佬写的文章都比较有技术水平,以我这点儿很low的技术水平,不知道写点儿什么。今天写这个文章,一是为了完成任务,二是想记录下前一阵的学习成果。
本人是做测试的,前段时间在研究selenium自动化测试,这里就记录下自己的学习成果,并聊下自己的理解,如果有说的不对的地方,欢迎大家指正。
这里主要想聊的并不是selenium简单的安装、元素定位等内容,而是想记录下PO模式实现Selenium自动化测试,对于selenium的安装、元素定位等内容网上一搜一大把,这里就不进行记录了。
PO模式
什么是PO模式
既然使用PO模式,那么就要先看看什么是PO模式
PO模式指将页面元素的定位及元素的操作分离
这种模式的好处就是当元素控件没变,但位置变化了,维护时不用再关注操作,只修改定位即可,而且如果使用场景中需要重复操作一个元素时,不需要重复定位,可以直接调用定位或操作即可。PO模式有点儿类似于面向对象开发模式,将基础内容进行封装,其他地方可以直接继承使用。
PO模式实现方案
对于selenium自动化测试来说,PO设计模式有两种方案:
- PO方案一
- 第一层:将所有元素对象定位器放到一个文件,不进行定位
- 第二层:将所有元素操作放到一个文件,先定位再操作
- 第三层:将公共的业务场景封装到一个文件中
- PO方案二
- 元素对象层:封装定位元素的方法
- 元素操作层:借助元素对象层封装元素的操作方法
- 页面业务场景层:借助元素操作层封装页面的业务场景
两种方案其实很相似,但略有区别,第一种是只找到元素定位器做集合,第二种是直接将元素定位做集合,按正常使用来讲,可能第二种更方便一些。
PO模式各层的详细描述
那么确定了PO的方案,下面详细聊下第二个PO方案
元素对象层
首先是元素对象层,该层用于封装定位元素的方法。什么意思呢?说白了就是看页面中有没有这个元素。在Selenium中查找并定位元素是非常关键的一步,若定位不到元素,后面所有操作都无法进行。说到这,就要提下selenium中比较关键的内容了,即元素定位和等待。selenium中提供了18种元素定位的方法,常用的定位方法有id、name、CSS、xpath等,对于等待,selenium提供了显性等待的WebDriverWait类。
元素操作层
元素操作层是借助元素对象层定位到的元素,实现页面元素的操作,例如输入用户名、输入密码等,和元素对象层一样,也需要一个页面一个类,类中实现操作方法,每个方法要操作的元素都来自于元素对象层定位的元素。
页面业务场景层
页面业务场景层是实现页面的业务场景,还是登录页面的例子,比如成功登录页面、不输入用户名登录、不输入密码登录等业务。同样也是一个页面一个类,类中实现业务场景的方法,即要实现登录页面需要哪些操作的集合,这些操作直接从元素操作层获取即可。
测试用例及报告
到此,对PO模式的分析就完成了,但是实现了这些,还不足以实现自动化测试,我们还需要设计测试用例。
测试用例
测试时肯定要指定测试的URL地址,使用的浏览器等内容,这些我们可以放到一个配置文件中保存,这样如果有任何变化,直接修改配置文件即可,这样我们就需要一个读取配置文件的方法,为了方便调用也是给独立出来。
有了基础信息,就可以设计测试用例了(注意使用不同的测试框架,用例编写方式略有差别),按PO的模式,测试用例中就是指定要执行哪些场景,获取哪些信息,比如不输入密码登录,需要调用页面业务场景层的不输入密码登录场景,执行后,还需要获取到提示信息,此时就需要分别在元素对象层、元素操作层添加提示信息元素的定位、获取内容的操作。
要想用例可以执行,还需要选择一个测试框架,目前有很多测试框架,比如unittest、pytest等等,根据不同的测试框架,编写不同的测试固件,设置不同的测试套件,并加断言,最后的结果测试框架会直接传递给测试报告。
测试报告
测试报告也有很多,比如HTMLTestRunner、pytest-html、Allure等等,选择好测试报告框架后,测试用例的执行结果会以页面的方式呈现出来。
按照以上步骤,就可以以PO模式实现Selenium自动化测试了,具体的实现代码可参考PO模式实现selenium自动化测试