本文用同一个实例来演示如何编写python 和java代码的selenium实战文章,读者可以通过这篇文章了解到selenium是什么、如何使用katalon recorder录制脚本、如何搭建Selenium环境以及如何使用python或者java编写selenium脚本。文章有一点长,但是请相信我,文章真的很实用,如果你想上手Selenium自动化测试,她一定会帮到你!无论你的web项目编码使用的是java还是python,看这篇文章就够了!
Selenium概述
Selenium 是用于测试Web 应用程序用户界面(UI) 的常用框架。它是一款用于运行端到端功能测试的超强工具。您可以使用多个编程语言编写测试(目前支持的语言有Java,Python,Ruby, C#),并且Selenium 能够在一个或多个浏览器中执行这些测试。
目前Selenium 组件主要包括SeleniumIDE ,Webdriver,Selenium Grid。
Selenium主要分为2和3,二者具体区别如下:
Selenium3可以看作是selenium2的升级版本,主要更新内容如下:
去掉了对selenium rc的支持。
全面拥抱java 8。 如果你需要使用selenium的java binding话,那么你就必须使用java 8了。
支持最新的firefox、edge、chrome、safari、opera、ie浏览器。
环境搭建
任何自动化测试的第一步都是从环境搭建开始、主要是是编码语言的安装、IDE的安装,最后是工具的安装,在这里先讲java的环境搭建,然后讲python的环境搭建
Java环境搭建
前提:
安装java,jdk 1.8.0_151
安装eclispe Neon.3 Release(4.6.3)
下载各个浏览器的driver,以firefox为例,firefox版本74.01(64位)
https://github.com/mozilla/geckodriver/releases
选择geckodriver-v0.26.0-win64.zip
注意:下载后把geckodriver.exe 放入windows的环境变量中
下载selenium jar包
访问https://www.selenium.dev/downloads/
IDE中导入selenium jar
把下载的selenium jar包和Junit4Library引入到Eclipse的selenium自动化项目工程
Python环境搭建
前提:
安装python,3.7.4,把 你的python\Scripts目录加入环境变量中
安装pycharm社区版就可以
selenium模块安装
安装selenium ,在cmd窗口中输入 pip install selenium,完成selenium模块的安装
由于Java环境搭建中,已经把geckodriver.exe 放入windows的环境变量中,这里就无需重复操作了
脚本录制
环境搭建后,我们可以进行自动化的上手操作了,录制脚本。
这里给大家介绍一款Selenium IDE的替代者,Katalon Automation Recorder
如下为安装使用方法:
安装
安装去谷歌应用商店,或者火狐插件均可下载,文档中的版本是4.1.3
安装完成后,右上角会出现插件图标:
使用
点击图标,会出现单独的 Katalon Recorder 窗口:
其中:
①工具栏
②用例管理器
③用例详情
④ Log/Reference/Variable
点击窗口上的 Record,下面就会开始录制浏览器操作了。
这里我们打开百度首页,输入selenium,点击“百度一下”按钮。
每当操作页面UI元素时候,插件就会记录下你这些动作,生成对应的录制脚本。
录制完成后,点击“Stop”按钮停止录制,点击“Play”按钮可以回放刚才的动作。
脚本导出
点击 Export 按钮可以把录制的脚本转化成不同的脚本语言,选择Java(WebDriver+JUnit),可以看到对应的Java脚本,还可以把脚本导出到IDE中进行二次开发。
选择Python2(WebDriver+unittest),可以看到对应的python脚本,还可以把脚本导出到IDE中进行二次开发。
脚本解析
前面我们已经演示了如何把录制的代码分别转化成java脚本和python脚本,如果想要执行脚本只需要把对应的java文件和py文件拷贝到Eclipse 和Pycharm中运行即可。这里我重点分析一下自动脚本的含义:
先分析java脚本,java的selenium脚本是基于junit4测试框架的,关于junit4框架这里就不详细说明了,后面我会写关于junit4的详细文章,欢迎大家持续关注。具体脚本说明请参考下图:
然后分析python脚本,python的selenium脚本是基于unittest测试框架的,unittest的规则与junit4类似,这里也不再详细说明了。
核心api的分析
Java
打开firefox浏览器
driver = new FirefoxDriver();
打开百度首页
driver.get("https://www.baidu.com");
清理输入框内容
driver.findElement(By.id("kw")).clear();
在输入框输入“selenium”
driver.findElement(By.id("kw")).sendKeys("selenium");
点击“百度一下”
driver.findElement(By.id("su")).click();
Python
打开firefox浏览器
self.driver = webdriver.Firefox()
打开百度首页
driver.get("https://www.baidu.com/")
清理输入框内容
driver.find_element_by_id("kw").clear()
在输入框输入“selenium”
driver.find_element_by_id("kw").send_keys("selenium")
点击“百度一下”
driver.find_element_by_id("su").click()
从上面例子不难看出,关于selnium 自动化测试,java和python提供的脚本是非常接近的,只要你会其中的一种,想读懂另一种并不是什么难事!
断言应用
我在自动化入门的文章中介绍过,自动化测试的本质是:自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。我们可以看到上面的例子中代码已经完成了对手工测试执行的代替,但是还有一点没有搞定,那就是——如何校验测试结果!无论是junit4还是unittest都提供了相关机制,我们统一称之为断言。
方法一:大家试想,我们搜索selenium关键字后,只要在网页中能够找到下图里“百度为您找到相关结果约”相关的文字信息就证明我们搜索成功了呢?
答案是:Yes!
方法二:网页中出现的selenium搜索结果都是链接形式展现,那么我们只需要判断网页中的web元素包含“selenium”关键字即可。
方法n:一个业务,可以有很多校验点,大家可以结合实际业务自行挖掘!
这里我们利用方法二来作为断言的校验点,Junit4中可以用方法assertTrue、assertEquals来进行断言操作。我们可以使用driver.findElement(By.partialLinkText("selenium")) 来判断页面中是否出现包含selenium的链接。在默认录制的脚本中,有一个方法isElementPresent ,用来校验页面中是否包含某个元素,代码如下:
我们可以利用该方法完成断言操作,代码如下:
assertTrue(isElementPresent(By.partialLinkText("selenium")));
改进后的测试用例代码如下:
最后运行代码 Run As >Junit Test,可以看到脚本的回放过程。
在python中,unittes提供方法assertTrue 和assertEqual作为断言,同java代码的实现原理,我们可以使用方法self.is_element_present(By.PARTIAL_LINK_TEXT,"selenium")
来判断页面中是否出现包含selenium的链接,改进后的测试用例代码如下:
最后在pycharm中运行代码如下图所示,同样可以看到脚本的回放过程。
讲到这里,我把百度搜索这个实例,用java和python两种语言进行了实际操作。现在大家已经了解了上手selenium的方法,剩下的事情是需要大家自己了解selenium元素识别的方式以及常用api的使用方法了,随着大家实际项目经验的丰富就会一点点成为selenium高手。
总结
selenium自动化测试的本质总结为以下两点:
1.通过使用selenium提供的api,对页面元素进行操控进而模拟人工点击;
2.通过断言机制模拟人工校验;
这个过程其实就是大家不断熟练selneium api进行编码的过程,当遇到复杂问题时,需要大大家具备过硬的编码技能,否则自动化脚本会及其脆弱。各位同学可以自己搞定后面的事情,当然也可以跟着我一起高效的学习自动化相关知识!
网友评论