Selenium+TestNG实战-3 对第一个登录脚本 大家来找茬

  • 作者: 凯哥Java(公众号:凯哥Java)
  • 测试相关
  • 时间:2017-11-16 09:14
  • 6974人已阅读
简介 前面一篇,我们一气呵成地完成了第一个Selenium自动化脚本的编写过程。当然是我完全给你灌输了这些代码和代码的解释,也许你还没有掌握。因为,我没有教你如何元素定位,如何写精确的xpath表达式,如何高效写测试断言。这些东西,有些你可以去我博客看看对应文章,有些是无法教会你,需要你多多练习,自己思考和总结。本篇,我们来找找上一篇自动化用例的不合理之处有哪些。 面向过程上面一篇脚本,其实就

🔔🔔🔔好消息!好消息!🔔🔔🔔

有需要的朋友👉:联系凯哥 微信号 kaigejava2022

前面一篇,我们一气呵成地完成了第一个Selenium自动化脚本的编写过程。当然是我完全给你灌输了这些代码和代码的解释,也许你还没有掌握。因为,我没有教你如何元素定位,如何写精确的xpath表达式,如何高效写测试断言。这些东西,有些你可以去我博客看看对应文章,有些是无法教会你,需要你多多练习,自己思考和总结。本篇,我们来找找上一篇自动化用例的不合理之处有哪些。

 


面向过程

上面一篇脚本,其实就是面向过程的思维下写的结果。我们把完成用户登录这个场景看过一个过程,这个过程细分很多步骤,每个步骤都利用我们知道的方法去实现了相关操作,最终实现了效果,这个就是典型的面向过程的思维。

面向对象

我们知道Java主要是面向对象编程。其实WebDriver driver = new ChromeDriver()就体现了面向对象的特性。我们利用面向对象中类和对象来看这个登录过程。浏览器是一个对象,因为具体到了ChromeDriver,然后登录页面是一个对象,页面元素是页面的属性。而元素本身也看着是一个对象,元素有各种操作方法。业务功能登录,可以看做是页面的一个方法。这个登录场景,其实我们完全可以用面向对象的做法来实现。 

框架

框架就是很多程序片段组合而成的程序。Selenium本身就是一个框架,提供了很多API供我们调用。这里说的框架是关于我们写脚本,或者如何合理,高效组织这个自动化测试项目。下面几个针对前面一篇写脚本方法的问题,来告诉你为什么要写框架。 

问题1:如何测试50个用户登录

前面我们完成了一个用户登录,那么如何测试登录50个用户呢?按期前面方式写50个这样的脚本吗?显然不合理

问题2:代码阅读性太差

我们把各种数据,例如浏览器地址,用户名和密码和业务功能代码都写同一个类文件。现在代码行不多,看起来还好,如果代码多了,数据多了,简直无法读下去。 

问题3:如何写几百个测试用例

我们一个用例写到了main方法,如果100个用例,我们怎么写,如何管理用例,如何执行用例? 

问题4:运行结果缺少跟踪

上面我们把结果打印到了控制台,我们能不能添加运行日志,记录每行代码的运行记录,方便出了问题进行调试。而且发送了错误,能不能截图。如果有测试结果报告更好。 

问题5:不支持多人同时写脚本

一个组肯定不只是一个人去写自动化测试脚本,如果多人加入,如何管理冲突。如何减少代码的重复。

其实问题还有很多,反过来,如果你有了框架的思想,那么面试中,自动化测试框架给你解决了什么问题,类似这样的问题就很好回答了。 

Selenium+Testng+POM框架 

Selenium肯定要,我们需要利用slenium提供的API去操作元素和操作浏览器。Selenium只是提供了最底层的操作元素的方法,有时候我们需要在这个基础上进行二次开发,封装成新的类,供我们在测试脚本中调用。 

TestNG是Java语言中一个非常流行的单元测试框架。TestNG提供了很多方式或者方法,让我们可以高效管理成千上百的测试用例。关于TestNG我博客里对应的入门系列文章。本实战也会涉及到一些常用的用例管理方法。还有一个就是,TestNG支持测试完后输出html文件格式的测试报告。 

POM

POM不是框架,更多是思想。最简单,POM就是页面对象模型,一个分层的思想。我们写用例也好,开发设计程序也好,都会去想办法实现分层。我们这里分层,主要是业务逻辑功能和测试脚本数据进行分离。业务逻辑都在一个个页面上操作,可以理解页面的一些Action。而测试脚本一般是调用页面的Action进行测试,加上断言。我们这里就把Action和TestCase进行分层。

Action有很多,每个页面都有不同Actions,这里我们采用POM思想,每个页面看着一个对象。每个页面主要有元素和很多Actions。利用PageFactory进行页面对象的初始化。 

页面基类,我们把很多页面进行抽象,抽出相同的部分。把相同部分写到一个父类文件,然后不同页面对象都继承该父类。基类抽象的部分有selenium提供的webdriver的一些事件或者方法,还有一些其他我们自定义的工具类或者方法。

后面的文章,我会带大家利用wordpress这个本地环境,逐步去搭建和实现这个框架的骨干部分,然后进行如何写自动化用例这块。

 


TopTop