【无标题】

自动化测试涉及分析、计划、设计、实现和执行等多个步骤,主要在需求稳定、频繁回归测试、多平台运行等场景下适用。本文介绍了自动化测试的概念、是否会替代人工、何时适合自动化测试以及自动化测试用例设计原则。此外,详细讲解了Selenium Webdriver的环境配置、工作原理和常用API,包括元素定位、操作和等待策略。
摘要由CSDN通过智能技术生成

自动化测试

自动化测试相关概念

什么是自动化测试

自动化测试就是将人对软件的测试行为转而由机器执行的一种实践。最常见的GUI(Graphic User Interface)自动化测试,就是模拟人对软件的各种操作,并自动验证结果是否符合预期的操作。
GUI(图形化界面),是指采用图形界面显示计算机操作环境用户接口。与计算机命令而言,图形界面对用户来讲更加简单易操作。

自动化测试会不会代替人工?

整个测试的过程分为:分析、计划、设计、实现和执行五个步骤,首先在需求分析阶段,需求去分析测试需求,提取测试点,这个是人工无法代替的;然后,在计划阶段需要人工去编写测试计划和方案文档,这个也无法由机器代替;在设计阶段,需要人去使用各种测试用例设计方法来设计测试用例,这个也是机器无法代替的;实现阶段需要去编写测试用例、测试脚本等,这个阶段可以由机器代替;执行阶段需要去执行测试用例,这个阶段也可以部分由机器代替。

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

需求稳定,不会频繁变更
研发和维护周期长,需要频繁执行回归测试
需要在多种平台上重复运行相同测试的场景
性能、兼容性通过手工测试无法实现,或者手工测试成本太高
被测软件的开发较为规范,能够保证系统的可测试性
测试人员具备一定的编程能力

自动化测试类型划分

广义:所有借助工具进行的测试都是自动化测试
狭义:主要指基于UI层的自动化测试。(一般提起的自动化测试都是这个)
测试阶段划分:基于代码的单元测试、集成阶段的接口测试、系统测试阶段的UI自动化

自动化测试用例的设计原则

自动化测试一般集中在需要重复测试的基本功能,基本业务流以及正向路径操作,不要将复杂的异常测试、复杂业务流程操作等加入到自动化测试用例中
自动化测试用例应尽量保持测试用例之间的独立性,最好不要形成依赖关系
自动化测试如果对数据进行了修改,在测试结束后应尽量保持还原,避免对其他测试用例的执行产生影响
每个自动化测试用例只能验证一个功能点

Selenium Webdriver(自动化测试工具)

说selenium或webdriver都是一个东西

webdriver环境配置

 通过pip install selenium安装最新的selenium库
 下载对应的chromedriver或geckdriver(浏览器驱动程序),并将driver放到环境变量的路径中。
Chromedriver下载镜像:
http://npm.taobao.org/mirrors/chromedriver/
 在pycharm中导入webdriver即可使用
from selenium import webdriver

webdriver工作原理

用程序语言通过脚本的方式将需要如何操作界面写出来,然后通过driver.exe驱动浏览器,告诉浏览器如何操作;浏览器操作完之后会把结果返回给driver,driver最后把结果传给用户,最终就完成测试过程。(不同的driver是每个浏览器厂商提供的供webdriver去操作自己浏览器的程序,这个程序本身是具备操作浏览器的能力的,所以我们只需要写脚本然后调用driver,driver会将请求转发给浏览器,告诉浏览器怎么操作)

自动化测试的LOVE四步法

元素定位Locate
元素操作Operate
结果断言Verificate
异常处理Except

webdriver常用API-浏览器操作

API:(Application Programming Interface),应用程序编程接口
打开:driver.get(url:网址/本地文件路径)

driner.get('https://www.baidu.com')

关闭:driver.quit()结束进程,driver,close()仅关闭当前窗口
设置窗口大小:driver.set_window_size(200,500)
最大化窗口:driver.maximize_window(),一般都需要最大化
获取网页源码:driver.page_source
获取窗口名称:driver.title
刷新页面:driver.refresh()
获取页面标题:driver.title
获取当前页面url地址:driver.current_url
获取当前页面截图:driver.get_screenshot_as_file(path)

driner.get_screenshot_as_file('baidu.png')

元素定位基础知识

1.HTML页面结构

-->html文档头部区域,页面不可见 -->html文档内容部分,页面可见 需要知道的是,在html源码中会定义各种元素及其属性,然后浏览器将其渲染出来,成为我们能看到和操作的页面。 浏览器遇到table标签后将table标签的内容渲染称一个页面上显示的表格。浏览器在解析过程中发现元素是一个输入控件input,会将整个控件渲染成输入框。浏览器在解析的过程中会将遇到的元素标签解析成页面上看到的内容。

2.常见的页面元素
容器型元素(可以其他元素):div(布局,登录、注册元素在页面上的位置,关注元素属性,梳理元素父子关系,帮助定位元素),form(表单),table,下面还会有一些元素
页面元素:a开头(link,超链接元素)、img(图片)、input(提供给用户进行输入的控件,button、text、file)、select(下拉框)、checkbox(复选框)、radio(单选框)、textarea(多行的输入框,文本域)、submit(提交按钮,普通按钮是button)

3.html、css、javascript之间的关系?前端三剑客
html:组成了页面的基本结构,类似于人类身体的骨架和血肉。需要页面有哪些元素就去定义。
css:层叠样式表,相当于美容的化妆品,定义了每一个元素的外观:颜色、位置等。决定着页面元素显示的外观及位置。
javascript:js,主要用于定义页面元素的行为。比如说点击之后会干嘛,这些通过JS定义。三者互相配合,最后决定页面具有哪些东西、长什么样子、以及具备哪些行为。
4.什么是前端?什么是后端?
前端:也叫客户端,就是所有与最终用户有直接交互的部分,都统称为前端;
后端:也叫服务器端,不直接与最终用户进行交互,在内部进行调用和数据处理的部分叫做后端;

常用的八种定位方式

元素定位方法很多,总的原则:怎么简单怎么来。观察元素属性、特征,哪个最简单用哪个。

id

有id属性,毫不犹豫,直接使用id定位。一般来说,页面上每一个元素都有唯一一个id地址;
好处:理论上不重复(除非开发人员乱写),唯一定位,重复了,可以直接骂开发;id本身变化不大,不会太修改。
driver.find_element(‘id’,‘username’).send_keys(‘凡云教育’)

name定位

name属性:有可能多个元素name属性值是相同的,它会返回第一个符合条件的元素。
比如:radio的几个选项name必须是相同的。

driver.find_element('name','sex').click()  #默认是返回第一个
driver.find_element('name','sex')[1].click()  #以列表形式返回所有符合条件的元素
class name(带class属性的元素)
driver.find_element('class name','dotborder').send_keys('凡云教育')

与name属性一样,重复就返回列表。
复合样式(两个class name属性),无法使用class name定位,会报错。比如:
driver.find_element(‘class name’,‘dotborder border’).send_keys(‘aaaa’)

tag name

一般来说用于查找同类的元素;比如,把页面上所有的input类型为text的元素找出来,并向里面填入内容。

elements = driver.find_elements('tag name','input') 返回列表
print(len(elements)) 
link text 和partial link text

link text和partial link text:用于定位超链接元素;a标签都可以使用这两个去定位。

driver.find_element('link text','打开百度').click()
driver.find_element('partial link text','百度').click()

 如果遇到的是超链接元素,推荐使用’link text’和’partial link text’来定位,这两个是专门用于定位超链接的
 如果本身链接是固定的,且文字比较少,使用’link text’
 有些超链接是动态的,写脚本的时候根本不知道超链接名字是什么,或者超链接名字比较长,这样的情况使用partial link text
driver.find_element(‘link text’,‘百度’)

Xpath(XML path)定位

除了使用属性定位(上面讲的都是属性定位),还可以利用元素所在的位置来定位。元素可以没有属性,但一定会有一个位置。有的程序员忙起来就可能不写属性了。
xpath和css selector为什么是万能的?
1.可以通过位置进行定位;
2.可以通过任意的属性进行定位(上面讲的都是根据自身属性进行定位,如id定位id属性、link text定位超链接属性等)。
XML:指的是一种标签对的文档结构,是由一堆这种首位配对的标签组成的文档。有点类似于HTML文档,是HTML文档中的一类,以开头、以结尾,开头、结尾,成对开头结尾的这种元素组成的一种格式化文档,叫做XML文档。XML path指的是XML文档类似于一个树,所有的每一个元素相当于树上的节点,所以我们可以通过描述树上节点的路径来去定位到具体某一个我们想要定位的元素。XML path用于描述一个节点在我们整个文档结构上面的位置的这样一种语言叫做xpath,xpath有自己的语法,首先要知道怎么样去描述xpath。

xpath语法:

绝对路径表示法:指从/目录开始的路径表示法,必须根据实际路径逐级表示。绝对路径比较麻烦。一般不用。

driver.find_element('Xpath','/html/body/form')

相对路径表示法:指从目标对象所在位置根据其父对象进行路径表示的方法。找到父元素能够被唯一地定位为止。

driver.find_element('Xpath','//tbody/tr[3]/td[2]/i')
driver.find_element('xpath','//tbody/tr[3]//i')
driver.find_element('xpath','//tbody/tr[5]/td[2]/input[2]')

xpath之特殊属性定位
//双斜划线指的是任意路径下面,标签为input,属性放在[]里,属性名用@开头,然后等于属性值。

driver.find_element('xpath','//input[@type="file"]')

多属性:

driver.find_element('xpath','//input[@type=["text"][@mode="sub"]').send_keys('18')

xpath模糊定位:
路径中只有标签,没有任何属性:

driver.find_element('xpath',"//i[contains(text(),'60岁')]").text

特殊属性里的内容比较多:

driver.find_element('xpath',"//textarea[contains(@placeholder,'yourself')]").send_keys('hello,凡云教育')

//后面的是标签,在后面中括号contains,如果没有任何属性,用操作函数取出值,有属性的话用@加属性名,后面属性内容中包含的值。

css selector定位

与xpath相似,但语法不同

find_element和find_elements的不同

webdriver常用API—元素操作

clear:清楚文本框的文字

driver.find_element('id','username').clear()

send_keys:
click:
text:获取节点上的文本信息
get_attribute(name):获取元素的属性信息

driver.find_element('id','username').get_attribute('class')

前面定位这个元素,后面获取这个元素的属性值

driver.find_element('id','username').get_attribute('value')

获取输入框里面的值用value
is_displayed:判断元素是否显示出来

driver.find
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值