Web自动化基础(selenium)

自动化测试

自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。测试过程中所使用的测试用例很大程度上与此前的功能测试用例重复,为了更全面的覆盖软件功能,确保软件质量,验收测试的用例相对更丰富,执行的次数也更多。因此在验收测试的过程可以将重复性的测试工作自动化,从而提高测试的效率和质量。

分层思想

学习web自动化的思路

(第一层次)首先你得知道:什么是元素?怎么去定位一个页面元素?怎么去控制元素?怎么控制浏览器?学完这些你就可以写简单页面 的自动化功能测试了。

(第二层次):熟练的编写页面自动化脚本:碰到复杂的页面,比如嵌套很多,知道怎么去跳转。复杂元素,怎么去定位,各种页面元素的处理,比如表格、下拉框、弹出框等等。

(第三层次):熟练掌握上面技巧之后,开始学习怎么将页面元素与代码分离,学习数据驱动,以及怎么样结合Excel去做自动化测试。

(第三层次):学习持续集成的方法,怎么样将自动化测试更加“自动化”。同时,开始学习自动化测试框架,能够根据产品的实际情况来编    写合适的测试框架。

什么样的项目适合自动化测试

1.软件需求变动不频繁。测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁,测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本,那么维护成本会很高。如果项目中的某些模块相对稳定,而某些模块需求变动性很大。便可对相对稳定的模块进行自动化测试

5.软件维护周期长。

6.项目进度压力不太大。当项目进度压的相当紧的时候,根本没有那么多的时间来搞自动化,因为其实这是个耗费时间的工作。所以测试人员在决定做自动化的时候往往需要首先分析确认哪些模块适合做自动化,这样才能更好的节约资源,合理利用有限资源。

7.被测软件系统开发比较规范,能够保证系统的可测试性。

selenium简介

selenium是web自动化测试工具集。

简单例子

考虑一个基本的登录功能的测试用例。

一、自动化测试 与 人工测试

在开始编写用例之前,我们先来思考下自动化测试和人工测试的区别。对于web页面的人工测试,我们想下,如果去测试,怎么操作呢?不外乎如下的基本动作:

1)打开浏览器

2)输入url (前提web服务器要正常启动运行着)

3)等待页面显示出来

4)测试人员用眼睛看页面显示的内容是否与自己想象的一致,如果一致,认为功能正常,否则,会认为程序有问题。

5)通过鼠标、键盘执行相关的操作,通过页面的变化和内容显示继续进行检查功能是否正常。

那么什么是自动化测试呢?其本质就是将人的操作过程(打开浏览器、输入url、鼠标点击、键盘输入等)以及验收标准转换为测试代码。有了测试代码,就可以让其自动运行了。

二、登录用例设计

一个登录功能,想象下如果是人工测试,那基本的测试过程一般如下:

1)打开浏览器、输入登录url

2)输入用户名、密码(也许还有别的输入项,如验证码,则取决于程序本身有哪些输入项),点击登录按钮

3)如果是正确的用户名密码,应该出来相应的页面;如果是错误的,应该出来错误页面或错误提示信息。

思考:我们是如何让去操作界面上的一些控件元素? 比如我们要在账号输入框输入账号。

定位器(参数里面包含locator参数的都需要用到定位器)

编写测试用例的时候需要告诉自动化测试脚本你要操作哪个界面元素。使用定位器去定位界面元素。selenium提供了很多的定位方法。(在学习定位之前应该了解更多的前端知识:HTML、CSS、Javascript)

定位元素的本质:要找到UI用户界面上需要操作的对象(往往都是控件,比如按钮、文本框),网页控件都有HTML相应的代码,利用代码中的信息来定位元素。

定位器类型:identifier定位(标识符定位);ID定位;Name定位;Xpath定位;DOM定位;LinkText定位;CSS定位 

locator参数的基本写法:定位器类型(locator type)=位置信息(location)


identifier定位

如果等号前面不写定位器类型的时候,默认就是identifier定位,所以在书写的时候可以去掉定位器类型和等号,只写一个location。

identifier定位其实就是先用ID定位,再用Name定位(将等号后面的location和ID去匹配和Name去匹配)

通过ID来定位:identifier=location(实例:identifier=loginFrom )          通过Name来定位:identifier=location(实例:identifier=password)

注意:id值具有唯一性,但是name值不具有唯一性,可能存在多个值相同的name。如果不做处理,定位时会默认定位到最先出现的那个。

ID定位

语法:id=location(实例:id=loginForm)

Name定位

语法:Name=location(实例:name=username;name=password;name=continue)

注意:上面说了如果不做处理,在name属性相同的情况下会默认定位到最先出现的那个,但是如果我们想要定位到自己想要的name嘞?

解决方法:可以在location后面增加过滤器来进一步确定位置。 

增加过滤器实例:name=continue value=Clear

LinkText定位

linktext定位是定位link(链接)中的文本。

语法:link=文本(实例:link=sample页面;link=locator测试案例)

CSS定位

 常用的五种方式

1.标记和ID选择器。  

  语法:css=tag#id      (实例:css=form#loginform) 

2.标记和类选择器。 

   语法:css=tag.class    (实例:css=input.required)

3.标记和属性选择器。

 语法:css=tag[attribute=value]  (实例:css=input[name=“password”])

4.标记、类、属性选择器。   

语法:css=tag.class[attribute=value]   (实例:css=input.required[name="username"])

5.标记和内部文本选择器。

语法:css=tag:contains("inner text")    (实例:css=p:contains("下面是表单:"))

解惑:css本身其实是选择器,由一些语法比如id选择器、class选择器,通过这些选择器来选择对html文档里面的标记来做样式的修饰。它的选择器和locator定位器是很接近的,我们的自动化测试里面是要对界面上的什么元素要做操作,而界面元素大多都是有样式的,都有css样式设置的,所以我们就借助了选择器来做定位器。选择器和定位器是非常接近的概念,所以它们在语法上就是借用过来的。

xpath定位

包括绝对路径和相对路径。尽量避免使用绝对路径,因为一旦在程序下一个版本里面对网页源代码做了一些调整的话,就会导致我们的自动化测试案例失效,健壮性很低。

实例:xpath=/html/body/form                                           (绝对路径,单斜杠加根节点开头)

           xpath=//form[input/@name='username']/input[1]   (相对路径,双斜杠开头)

           xpath=//form[1]/input[1]                                          (相对路径)

           xpath=//form[@id='loginForm']/input[1]                   (相对路径)

注意:双斜杠开头的xpath定位,可以把等号前面的定位类型去掉。

DOM定位

实例:dom=document.getElementById('loginForm') 

           dom=document.forms[0]

           dom=document.forms['loginForm']

           dom=document.forms['loginForm'].username

           dom=document.forms['loginForm'].elements[0]

           dom=document.forms['loginForm'].elements['username']

注意:由于dom定位的location都是以document开头的,和上面说的几种定位器都不一样,所以它的类型可以省略掉。

可以借助firefox浏览器的插件firebug来获取一些定位。

首先应该使用简单的定位器来实现定位。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • 洞见SELENIUM自动化测试 写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出...
    厲铆兄阅读 6,706评论 3 47
  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,599评论 1 180
  • 情感四行 阿馨 花儿的心事 只有季节能懂 而风的话语 转瞬便会无影无踪 ...
    诗意的栖居_b130阅读 113评论 13 20
  • 寒来暑往,秋收冬藏,四季变换,循环往复。而我们的生命却如东流之水,一去不复返。为了让自己的生活有迹可循,拍照不失一...
    大美的打字机阅读 314评论 0 0