随着UI自动化测试工具可选性越来越多,工具也越来越稳定,前几年关于自动化测试架构设计的概念逐渐淡化,但是自动化架构设计中最有用的PO设计模式思想依然需要刚入门自动化测试领域的小白深刻掌握,本文就带大家理解什么是PO设置模式以及对其优化的具体方案。
Page Object直译就是页面对象,也就是把界面定位和业务操作分开。它是自动化测试项目开发实践的最佳设计模式之一,通过对界面元素的封装减少冗余代码,同时在后期维护中,若元素定位发生变化,只需要调整页面元素封装的代码进而提高测试用例的可维护性。
做过UI自动化的同学都知道,在做UI自动化时定位特别依赖页面,一旦页面发生变更就不得不跟着去修改页面定位。假设你脚本中有10处对这个元素做了这个操作,哪天这个控件的元素变了,你就不得不去修改10个地方;
另外一个引入PO模式的好处是我们可以统一变量的命名规则,让我们一看变量的命名就可以知道页面中操作的是哪个元素了(当你写过具体业务以后,这点自然就懂了)
这里举一个自动化测试非常经典的例子,在百度搜索框中查找关键字,录制代码如下:
这里以selenium 的java代码为例
driver.findElement(By.id("kw")).clear();
driver.findElement(By.id("kw")).sendKeys("selenium3");
driver.findElement(By.id("su")).click();
引入PO模式该如何实现呢?
首先创建ObjectStore类,创建关于输入框和搜索按钮的变量。
public static final String Search_Inputbox="kw";
public static final String Search_Button="su";
然后,在脚本中就可以这样书写了
driver.findElement(By.id(ObjectStore. Search_Inputbox)).clear();
driver.findElement(By.id(ObjectStore. Search_Inputbox)).sendKeys("selenium3");
driver.findElement(By.id((ObjectStore. Search_Button)).click();
这样是不是就解决了页面元素发生变更需要批量修改脚本以及变量统一命名的问题了呢?
其实这里的PO设计模式还是有一些缺陷的,大家想要进阶了解的更多可以参考下面这篇文章:
绝对干货!自动化测试PO设计模式的进阶实现(附源码),适合想提升编码能力的测试同学-CSDN博客
在传统的PO模式下,要求应用程序的每一个页面都有一个对应的page class,每一个page class维护着该web页的元素集和操作这些元素的方法。在实际工作中并不需要严格按照该要求进行设计,我们可以把多个页面中的元素同时维护到一个ObjectStore类,通过注释进行区分标识即可。
我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!