22
07

Selenium IDE->测试Agileone的公告管理

Selenium IDE是Selenium家庭中一个入门级的自动化测试工具,是基于Firefox浏览器的一个插件,提供GUI界面来运行Selenium测试。Selenium IDE提供脚本录制功能,可以将用户在浏览器中执行的操作记录下来,生成各种形式的脚本,可以将这些脚本保存供以后使用。

实验简介


Selenium IDE是Selenium家庭中一个入门级的自动化测试工具,是基于Firefox浏览器的一个插件,提供GUI界面来运行Selenium测试。Selenium IDE提供脚本录制功能,可以将用户在浏览器中执行的操作记录下来,生成各种形式的脚本,可以将这些脚本保存供以后使用。由于Selenium IDE无法对其生成的脚本进行灵活的处理和控制,所以我们往往无法把Selenium IDE运用在实际项目中。但是通过对Selenium IDE的使用,可以帮助我们很好地完成如下三件事情,所以在Selenium系列工具里面,也算是一个比较重要的工具:


(1) 提供录制回放的功能,可以帮助我们快速地进行测试的可行性分析。

(2) 能够将这些录制出来的测试脚本导出为Java或Python的自动化测试代码。

(3) 提供一种很好的基于关键字驱动的自动化测试脚本开发的体验。

(4) 帮助我们对页面元素进行精确地识别和定位,而不用我们再人为地去获取元素的识别属性。

 

实验目的



(1) 理解Selenium IDE基于特征识别的自动化测试原理。

(2) 熟练使用Selenium IDE进行简单的自动化测试脚本的开发。

(3) 熟练使用Selenium IDE提供的各项功能帮助我们提升效率。

(4) 理解Selenium IDE的优势与不足,便于在项目中灵活使用。


实验流程



1. 在Firefox中安装Selenium IDE


首先,我们可以去http://www.seleniumhq.org/download/ 网站下载Selenium IDE的Firefox插件,事实上,有关于Selenium常用的组件,都可以在此网站上进行下载。但是访问国外的网站经常容易出现无法访问的情况,所以如果无法访问,则直接百度下载即可。目前最新版本是2.9.1,其插件的文件名通常为:“selenium_ide-2.9.1-fx.xpi”,下载完成后,打开Firefox浏览器,将该xpi文件拖入到Fireofx窗口中即可,如下图:


20180118_145723_962.png 

 

直接点击“立刻安装”按钮,并按提示重启Firefox即可完成安装。我们会在Firefox工具栏下找到Selenium IDE的启动按钮,启动后的主界面如下图:


20180118_145733_225.png 

 

从上图我们可以看到,Selenium IDE的主窗口可以分为以下5个部分:


(1) 菜单栏:主要包括测试脚本的打开,保存,导出,运行,选项设置等。

(2) 工具栏:主要包括测试脚本的执行,暂停,脚本录制按钮等。

(3) 测试用例列表(左侧):可在此新增或删除测试用例。

(4) 测试脚本管理(右侧):所有的测试脚本的核心操作在此列出。Selenium IDE默认使用类似于关键字驱动的方式实现测试脚本,所以其脚本是非常直观的,可读性也很强。

(5) 日志栏:主要用于测试脚本运行过程的日志信息查看,包括错误消息等。

 

2. 利用Selenium IDE登录Agileone


对Selenium的基本操作有一个初步的了解后,我们现在来利用Selenium IDE录制一个简单的操作,并完成测试断言。


(1) 先确保右上侧的红色录制按钮被按下(默认是按下状态)。

(2) 将窗口切换到Firefox主窗口,按照正常操作流程输入Agileone的首页地址,加载完成后输入用户名和密码,点击登录按钮。

(3) 当上述操作完成后,切换到Selenium IDE窗口,可以看到录制的脚本如下:


20180118_145742_299.png 

 

(4) 我们可以看到,Selenium IDE将测试脚本的操作分为三个部分:Command,Target和Value。对于Open或者Click之类的操作,只需要指定其Target即操作的目标对象即可,而对于文本框一类的需要输入内容的元素,则需要额外在Value中指定其输入的内容。


(5) 点击工具栏左侧的Play current test case按钮,即可运行该脚本。此时脚本运行如下:


20180118_145758_551.png 

 

(6) 当运行上述脚本时,我们可以看到在Log窗口中出现了一个错误:“[error] Element id=username not found”,错误消息告诉我们一个id属性为username的元素没有找到。究其原因,是因为我们上一次录制脚本时已经登录到Agileone,所以当再次打开Agileone首页时,会直接进入到Agileone的主页面,而本页面中不存在id=username的元素。我们当然可以手工地先将当前登录的账户注销后再次运行该脚本即可。


(7) 另外一种相对更好的解决方案是,在测试脚本中点击Agileone首页的“注销”超链接。这样每一次运行登录后,都会完成注销,便不会出现打不开登录页面的情况。除了再次录制一下“注销”操作外,我们还可以手工添加此操作。在现存脚本的最后(即:clickAndWait的下一行),右键选择“Insert New Command”添加一行新的命令,并用鼠标选中此行,在Command中输入“click”命令,在Target中点击按钮“Select”,将鼠标定位到Agileone页面中的“注销”超链接处并点击该元素,我们可以看到,Selenium IDE会在鼠标经过的所有元素上用虚线将该元素框住,表示可以正常识别到该元素。最后生成的脚本如下:


20180118_145808_651.png 

 

(8) 手工注销Agileone后,并再次运行该脚本,整个过程非常流畅地完成了自动化的登录和注销。

 

3. 添加断言


我们需要的,不单纯只是自动化的完成我们指定的操作,还需要达到测试的目的。所以为自动化测试脚本添加断言是非常重要的一环。比如针对上述的登录和注销的操作,我们又该如何为其添加断言呢?


(1) 为登录操作添加断言:断言的核心就是找到本次操作完成后的关键特性。在Selenium IDE中,为断言提供了非常多的Command操作,比如成功登录Agileone后,会进入其主页面,那么只要我们找到一个该页面中存在的任意元素,而在登录页面不存在的元素,便可以实现断言,其断言命令为:“assertElementPresent”。为此,我们只需要在登录按钮点击后添加一行新的断言命令即可。比如此处我们断言的特征就是“个人设定”这个元素出现:


20180118_145819_268.png 

 

(2) 为注销操作添加断言:当我们注销了以后,自然会回到登录页面,所以此时我们可以用同样的方式,去断言一个登录页面上的元素是否存在。比如assertElementPresent id=username。


(3) 在Selenium IDE中,所有的断言命令均以“assert”开头,我们可以在Command中输入assert并从其下拉列表中选择合适的断言即可。我们可以根据其断言命令的名字清楚地知道该断言的作用。

 

4. 格式化Selenium IDE脚本


默认情况下,Selenium IDE会将其测试脚本保存为一个标准的HTML文件,并且以HTML表格的形式存储这些操作命令。只需要选中该测试用例,并点击“文件”菜单下的“Save Test Case”,便可将该脚本保存起来,以供下次使用。我们不妨用浏览器打开该测试用例保存的HTML文件,看到的结果如下:


20180118_145833_308.png 


这是一个标准的HTML表格,只不过里面存放的,都是Selenium IDE的操作命令而已。默认的Selenium 内核便通过解析该HTML表格里面的内容,将其运行命令或操作对象等内容读取出来再运行即可。

 

Selenium IDE除了可以用HTML保存测试用例以外,还支持其它格式,比如C#,Python,Java,Ruby等。此处有两种方式完成其它编程语言的保存处理:


(1) 利用格式化输出的方式:

我们可以在测试脚本窗口的,将测试脚本切换至Source标签页,便可以看到标准的HTML源代码,如下图所示:


20180118_145843_633.png 


既然Selenium IDE支持其它编程语言,当然,我们也可以在Source中显示其它格式的测试脚本源代码。首先,打开“Options”菜单下的“Options”选项,在弹出的选项对话框中的“General”中,勾选“Enable experimental features”选项,确定。该选项表示支持Selenium IDE启用一些处理试验阶段的新特性。


20180118_145853_146.png 


接下来,在“Options”的“Format”中,选择我们需要的任意类型的编程语言,在弹出的提示窗口中点击“确定”按钮,即可在Source中看到对应的编程语言。同时,如果保存该测试用例,则直接保存为对应的编程语言的源代码。


20180118_145902_609.png 


从上图中我们可以看出,Selenium IDE可以导出的编程语言有四种,同时我们还会发现,Selenium可以导出Remote Control和WebDriver两种脚本。目前在最新版本的Selenium中,已经取消了对Remote Control(即Selenium RC)的支持。因为Remote Control是早期的Selenium发行版本中的功能,主要利用注入JavaScript脚本的方式来运行自动化测试脚本。此类运行方式并不是很稳定,执行效率也较低,所以最新的Selenium 3.X的版本中,已经取消了对其的支持,进而全力支持WebDriver。所以,我们学习Selenium,除了IDE作为一个基础工具需要学习外,重点要学习的便是WebDriver。同时,WebDriver已经成为事实上的Web系统的测试标准,所以除了Web自动化测试外,针对移动APP的自动化测试框架Appium也同样采用了WebDriver作为其标准。

 

20180118_145911_091.png 

通过上述的脚本,我们也可以看到,Selenium WebDriver是如何工作的。上述的代码,需要在Selenium WebDriver+TestNG的环境中才能正常运行。后面的实验我们将会为大家详细讲解其用法。

 

(2) 利用导出用例的方式。


除了利用格式化输出的方式保存不同类型的测试脚本外,还有更加简洁的一种方式来将Selenium IDE录制的脚本导出为其它编程语言。我们可以点击“文件”菜单中的“Export Test Case As…”菜单项,选中对应的脚本类型,并保存即可。

 

由于Selenium IDE的功能有限,所以通常在真实的测试项目中,我们不会直接用到Selenium IDE,但是会使用Selenium IDE作为一个辅助工具,帮助我们通过录制脚本的方式快速生成其它编程语言的测试脚本,并在WebDriver环境中运行。

 

5. 测试Agileone的公告管理


对Seleniu IDE的操作有了一个相对全面的理解后,现在我们来利用Selenium IDE完成对Agileone的公告管理模块的新增功能的自动化测试。先来分析一下整个过程的关键操作及断言:


(1) 首先实现登录。并对登录功能进行断言。

(2) 进入公告管理页面,并对该页面是否成功加载进行断言。

(3) 输入公告的过期时间,标题,内容等,并点击“新增”按钮提交。

(4) 对提示信息进行断言,确认公告新增是否成功。

(5) 对公告列表的表格进行断言,确认刚才新增的公告标题存在于表格中。

(6) 注销Agileone并回到登录页面。


利用Selenium IDE的录制功能,结合手工添加的断言,最终的测试脚本如下:


20180118_145920_002.png 

 

现对上述脚本中的几处关键命令进行一下讲解,请读者在完成实验是特别注意:


(1) 考虑到某些时候页面加载需要一个过程,不一定非常迅速,所以我们在点击登录按钮后加载主页的地方,加了一个等待命令“waitForElementPresent link=注销”,表示等待登录执行完成,直到页面中出现一个超链接“注销”为止,说明登录动作已经正常完成,避免后续操作上的问题。


(2) 针对一些特定情况,我们也可以利用利用“pause 3000”让脚本暂停运行3秒钟,来确保提交功能完成提交。比如我们在添加了一条公告以后,由于需要提交数据到后台服务器处理,这个过程必须会花一些时间,所以我们让脚本暂停,否则后续的断言很有可能失败,但是却并不是因为没有新增公告成功,而是断言在执行时新增公告还没有提交完成。


(3) 由于在Agileone中使用了KindEditor的HTML在线编辑器,所以在输入公告内容时,我们必须要先点击“css=img.ke-common-icon.ke-icon-source”切换到该在线编辑器的“代码”视图中,才能正常输入公告的内容。


(4) 当我们新增了一条公告时,也需要暂停几秒钟,以使后续的断言能够正常进行。同时,我们可以看到,当我们利用“assertText”命令对页面出现的文本进行断言时,我们使用了模糊匹配,比如“成功啦: 新增数据成功*”,其中的“*”便是模糊匹配,这样可以更好地自适应内容的变化。

 

6. 利用Selenium IDE的调试功能


针对上述脚本,Selenium IDE为我们提供了非常不错的调试功能。在任意一行脚本上,点击右键,我们可以看到如下的菜单:


(1) Toggle Breakpoint:在本行命令上设置断点,脚本运行到此处时会停下来,进入手工运行模式。

(2) Set / Clear Start Point:设置脚本是否从本行命令开始运行,而不是从头开始。

(3) Execute this command:手工执行本行命令,脚本不会自动运行到下一行去。

 

上述几个调试功能与Eclipse里面的调试功能有类似之处,所以我们应该非常清楚其用法,读者只需要简单确认一下上述几个功能即可。

 

7. Selenium IDE的优势

(1) Selenium IDE是标准的关键字驱动(Keyword-Driven Testing),其设计理念是非常先进的,也是目前很多自动化测试框架如Robot Framework所遵循的理念。

(2) 我们可以通过录制的方式,不需要写一行代码便完成了自动化测试。对于没有编程经验的测试人员来说,无疑可以大大减少自动化测试的门槛。

(3) 支持生成多种编程语言,提高测试脚本的开发效率。

(4) 作为Selenium测试体系中的重要一员,Selenium IDE作为一个辅助工具,还是非常有优势的。

 

8. Selenium IDE的不足


(1) 无法对代码进行逻辑控制,只能顺序执行。

(2) 无法像编程一样,处理一些动态变化的数据,比如新增一条公告后,ID会增加。

(3) 无法进行异常情况的处理,比如判断Agileone是否处于已登录状态。

(4) 无法进行灵活的断言。

(5) 无法对数据库进行直接的操作,只能通过界面完成简单的测试。

(6) 无法适用于中大型的测试项目。

(7) 在灵活性,稳定性,可靠性,适应性等方面都无法达到要求。

 

 

 思考练习



(1) 一个自动化测试工具,除了录制回放断言外,还应该具备哪些功能?

(2) 基于界面的自动化测试,还需要哪些技术的支撑,才能适应更大的测试项目。





为了答谢大家对蜗牛学院的支持,蜗牛学院将会定期对大家免费发放干货,敬请关注蜗牛学院的官方微信。


20181009_153045_341.jpg


版权所有,转载本站文章请注明出处:蜗牛学苑, https://www.woniuxy.cn/article/63