UI自动化基础 - selenium快速入门教学

前言

        自上次更新了xpath路径的查找,这几天又完成了一些关于selenium里方法的学习,感觉selenium确实不失为一个好的自动化入门软件。所以秉着不断学习的过程,也顺带记录一下selenium基本的环境搭建和基本的使用方法来为后门深入自动化开个头(一定不是为了鸽我不更新的python复习部分博客。。)

1.UI自动化介绍

        既然我们要学习selenium,首先我们要知道为什么要学习它。简单来说,就是为了做我们测试最常提到的自动化这个词。

        1.1认识UI自动化

        UI的定义就是user interface(用户界面),简称就是UI,用户界面是系统和用户之间进行交互和信息交换的媒介。那么UI自动化测试是什么呢,就是利用工具,或者脚本代码来对系统界面体现的功能和数据信息展示等进行的测试技术。

        那么我们什么情况下适合实施UI自动化呢?

如:大量的版本回归

        手工回归效率慢

        测试工程师价值得不到体现(这个解释有点b格,自我驱动能力)

        1.2UI自动化的特性

        一般执行测试用例,我们都会有个前置条件,那么做UI自动化测试也有前置条件:比如说这个项目适不适合做自动化,一般来说适合做自动化的项目其功能模块需求变更是趋近于稳定不频繁的,并且来说只去实现核心功能模块;如果这个项目周期太短,也是无法做自动化测试的,在花费自动化测试的时间上来说,功能测试和自动化测试的时间比值大概是1:3。

        一般来说,自动化的测试时机都是在手工测试完成之后,版本的功能趋近于稳定才会开始,不过公司如果有专门的自动化小组,那么项目刚开始就可能已经开始启动UI自动化测试工作的环境部署了,but除了大厂才有这样的需求,即使估值高的公司也不会愿意花时间来做自动化,毕竟时间投入大。

        1.3自动化的核心作用和劣势

        互联网项目现状是什么样的呢?大家都追求敏捷开发,文档缺失严重。那么在这样的情况下我们做自动化的优势和作用是什么呢?

        1.节省人力等成本,回归测试交由脚本代替人去执行;

        2.提高回归测试效率(利用脚本执行速度会更快,避免了多次回归仍要手动点击毕竟人虽然点的快,点多了也是会烦的)

        3.提高测试质量:一但自动化测试脚本在项目当中完善后,执行过程会更精确和准确,避免了测试人员忘记某些部分的回归验证。

        4.自动化脚本也是可以构建我们的测试数据,作为一个记录,在脚本当中能够体现测试数据

        5.作为项目文档辅助也是自动化测试的一个作用,一个比较完善的自动化脚本中的注释和一些代码适合新接手的测试人员更好的去熟悉我们的测试内容。

讲完了这么多的优势,一枚硬币必然是有两面的,自动化的劣势和缺点又是什么呢?

        1.对测试人员要求高,这个是毋庸置疑的。一般的初级测试人员对软件的测试点能够有一个清晰的认知,能够编写合格的测试用例殊为不易,对于代码认知度和协议的理解也是进阶部分的内容。

        2.前期投入成本大,这里不仅是对人员对时间都是很大的一个考验,自动化测试绝不是一日而就的一个测试功能。

        3.对项目要求高,对于一个项目来说如果多次迭代都变更了需求,那么自动化的意义相对来说就不大,且效率也会降低,毕竟反复的修改脚本的时间并不划算。

        ps:要是手工执行都比自动化有效率,那还做个啥自动化~

        1.4自动化工具的选择

        我们软件测试的自动化一般来说针对两个方向,一个是web界面一个就是移动端的APP界面,在这里我主要先谈论web自动化的实现,其实原理也是类似的。web项目实施自动化一般来说也是用python+selenium+unittest,app实现的方法是用python+appium+unittest。

        实际项目当中一般来说就是python+selenium,毕竟unittest是python自带的用来做单元测试的库,更适合开发人员作为自测来使用,对于测试人员的话不开放源码的用处并不大。

        除了selenium工具,我们也有别的常用的自动化的工具,比如QTP:是一个商业化的功能测试工具,不过是收费的~支持web或者桌面的自动化测试(不用写代码),很明显对于这种收费的我们秉着白嫖想写代码的思维就不想用;还有一个好使的就是Robot Framework,它也是一个基于python来实现可拓展关键字驱动的测试自动化框架,不过它是封装好的,针对关键字来实现的,对于代码的自由度并不高,我们为了更有创造力,那必然是选择Selenium大法~

        

2.selenium工具

        终于啊,我们可以正式进入主题了,前面怕大家不知道为啥要学selenium去饶了一大圈来解释。

        2.1selenium简单介绍

        我们做UI自动化主要的目的是为了针对回归测试,那么就需要考虑项目的兼容性:一个是平台一个就是浏览器,再基于脚本编写和维护,我们一般考虑的点无非也是软件质量模型的那几个特性:可移植性,可维护性,成本等,那么刚好selenium就是综上所述最适合的工具了。

        selenium是一个开源的软件,我们能够在python当中修改,python也是简单容易上手的语言

        selenium支持跨平台,我们写的脚本在mac和win里都可以运行

        selenium支持多种浏览器,主流的Chrome和ie都可以使用

        selenium支持多种语言,除了上面说的python,java,js都可以使用,包括了十几种语言

        它功能强大,成熟稳定,欢迎使用~

        

        2.2环境搭建

        说了这么多理论支撑,还是直接来点干货,直接上环境搭建的方法,三步走就可以。

1.首先需要python的开发环境,自己去装pycharm下载一个python的解释器(这个很重要),我这里不做具体的python的环境搭建说明了,之后如果有写python的学习博客再细说。python环境搭建完在终端或者cmd下输入python就会有对应版本出来 说明环境搭建成功。

2.安装selenium,这一步也很简单,直接在python环境下的终端里面输入我们的安装指令,pip install selenium即可,或者pip3 install selenium。当然也可以具体某个selenium 3.0开头的版本,因为有的一些旧的教学博客的一些指令是使用我们原先的版本里的指令,这个后续我会提,目前最新版本默认下载的安装版本是如下图所示的4.0之后的版本:

 3.最后一步,就是安装我们浏览器的驱动,保证说我们程序能够驱动浏览器实现自动化环境。安装驱动的下载地址在这:CNPM Binaries Mirror

然后将我们下载下来的压缩包解压成文件夹,里面的chromdriver.exe复制拷贝到python所在目录即可,然后在终端里输入chromedriver有版本就说明成功配置。 如下图所示

如果是mac版本的话,就把chromedriver复制到 usr/local/bin目录下,mac下查看隐藏文件的方法是command+shift+.  

        一般来说,版本最好都要对应好自己的需求,要留意不同版本的语法或者兼容性。注意,每一部的环境配置,都要验证一下是否成功配置。

        

        2.3导入selenium包

        emmm,因为这里要涉及到python的一些系统知识,所以我也不细讲代码的组成逻辑和背后的原理,就通过代码块的展示让大家直接简单的使用即可。

        我们导包的部分,就是相当于调用,如下图所示调用我们的selenium。

from selenium import webdriver

        非常的简短,然后我们就可以开始学习selenium的应用了。。。

3.selenium基础应用

        本来是想讲一下如何定位元素的,但是大家直接去查看我另外一篇自动化里面讲的xpath元素定位的博客即可,非常懒人式的教学,也可以用下面这张图,然后自己去理解去学习一些查看元素的理论知识,我不太想多概述,实际项目中有很多巧妙的定位方法,或者大家有自己喜好的定位也是视个人而定。

        3.1元素定位

        首先,我们利用selenium来做ui自动化的背后的基本原理就是通过对web界面上每个元素的定位来从而找到在哪一块该做什么。这里其实涉及到了html语言的学习,我前面也有写过html知识点的博客,或者大家也可以去w3school中系统学习我们的html知识,这样也方便对元素定位的概念更清晰。不过这里默认大家都懂了,包括Python的编译。。下面是我们元素定位常用的八个方法.

1、id
2、name
3、class
4、tag_name
5、link_text
6、partial_link_text
7、xpath
8、css

        虽然很多人觉得css的定位很简单,如下图所示它是用的一种选择器定位,但是我不推荐

         我个人还有包括公司的开发都是强烈推荐用xpath,xpath能定位到界面里出现的所有的元素。不过最便捷的方法就是,有id先看id,没有就用xpath。xpath使用绝对定位或者相对定位,绝对定位就是从/开始一层层的使用tag往下嵌套,相对定位就是使用特定的条件寻找在往下嵌套或者是直接找到

举例:单个条件匹配如 //div[@id=''],这个是最常用的最好使的。

还有比较小众的查找方法:根据span的完全文本匹配 // span[text()=''],根据span的部分文本匹配 //span[contains(text),'']

        3.2元素操作

        我们定位到元素之后,就是让元素执行我们想要的操作。比如我们测试经常会用到在某个对话框输入东西,或者点击某个按键。

        那么我们首先需要找到这个元素,代码的部分是这样的

find_element("xpath","元素定位内容")

        没错,上面的xpath元素定位或者最后的定位方式就是在这里面放置就可以了,不过仅仅有这样的定位到我们想要的元素之后,我们还可以对元素进行操作,比如说最常见的输入和点击。下面示例就是在火狐浏览器下进行百度输入“自动化测试”然后点击搜索的脚本示例。(没错,是火狐浏览器,在大众都使用Chrome下我要做个逆行者,当然了用火狐安装驱动的方式和调用的方式是一样的)

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()

driver.get("https://www.baidu.com")

driver.find_element("xpath","//*[@id='kw']").send_keys("自动化测试")

sleep(2)

driver.find_element("xpath","//*[@id='su']").click()

        不对代码做讲解,就针对里面用的输入和点击直接说明方法,我们用的send_keys("")和click()这都是对我们定位到的元素进行操作,仔细看可以发现两个定位到的元素xpath不同,因为一个是对百度输入框定位,一个是对百度搜索的按钮进行定位。

        除了输入和点击,我们也有一些别的方法,大家感兴趣的可以自行去寻找,因为一篇博文要说的很详细太多字大家也不会想看,像我们输入框元素定位到后还可以加入.clear()清除输入的文字这样的方法,还有is_enable()和is_display()这样的对检查元素属性的方法,很多的示例完全符合大家实际在自动化测试当中的需求,当然入门能够玩转好上面那个脚本的两个方法就有了我们平常鼠标交互web界面的最高频的操作。

        3.3常用的浏览器方法

        我们除了像上面说的输入和点击这种最常用的操作元素的方法,也有一些对浏览器本身进行操作的方法。比如说,我们想打开浏览器之后设置它的显示范围:

        窗口最大化:.maxmize.window()

        设置窗口大小:.window_size(weight,height)

        设置窗口位置:.set_window_position(x,y)

也可以设置浏览器的显示界面:

        页面后退:.back()

        页面前进:.forword()

        页面重制(也就是我们刷新页面):.refresh()

PS:其实这一堆方法里,最常用的就是窗口最大化和刷新页面。

4.结尾

        很显然,这个博客又是短时间内赶出来的,麻雀虽小但也算是五脏俱全吧。毕竟师傅领进门修行靠个人,很多细节方面的我一时半会也不可能全部都能说清楚,有的像浏览器驱动安装有时候死活就装不起来。。。还有python配置环境变量解释器这部分可能又劝退一些人,而且单纯的看是不太能理解整个调用的框架的,即使是定位元素部分有另外一篇博客的懒人法也要大概懂一下html是什么东西。因此,进阶性的一些东西都是和多知识挂钩的,并非说像我们功能测试在掌握测试原理的前提下就能按自己的常识去做一些拓展。唯有多学,多实践,多查资料,多积累,才能玩转自动化。之后有更新的话再看看有没有实际的项目能试试手。

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值