web自动化测试初识(UI)

自动化测试简介

传统自动化测试: 基于产品UI层的自动化测试,它是将黑盒功能测试转化为由程序或工具执行的一种自动化测试。

分层自动化测试: 应该有更多低级别的单元测试,而不仅仅 是基于产品UI层的测试。

分层自动化测试: 倡导从黑盒(UI)单层到黑白盒多层自动化测试体系,从全面黑盒自动化测试到对系统的不同层次进行自动化测试。

        web自动化测试初识(UI)_第1张图片

单元自动化测试: 指对软件中的最小可测试单元进行检查和验证。规范的进行单元测试需要借助单元测试框架,如Java语言的Junit、TestNG,Python语言的unittest、pytest等。

接口自动化测试: 1、模块接口测试:主要测试模块之间的调用与返回 2、Web接口测试:主要分为服务器接口测试与外部接口测试。

UI自动化测试: UI层是用户使用产品的入口,所有功能都通过UI层展示并提供给用户,所以测试工作大都集中在这一层进行。

适用条件:1、需求变动不频繁 2、项目周期较长 3、自动化测试脚本可复用。

适用场景:1、大量的冒烟测试;2、大量的回归测试;3、测试结束后跑整个系统的稳定性。

selenium框架简介

selenium 的特点

  1. 开源,免费 多浏览器支持:FireFox、Chrome、IE、Opera
  2. 多平台支持:linux 、windows、MAC
  3. 多语言支持:java、python、ruby、php、C#、JavaScript
  4. 对 web 页面有良好的支持
  5. 简单(API 简单) 、灵活(用开发语言驱动)
  6. 支持分布式测试用例执行

selenium RC

selenium RC 是 selenium 家族的核心工具,selenium RC 支持多种不同的语言编写自动化测试脚本,通过 selenium RC 的服务器作为代理服务器去访问应用从而达到测试的目的。

selenium RC 使用分 Client Libraries 和 selenium Server,Client Libraries 库主要用于编写测试脚本,用来控制 selenium Server 的库。

Selenium Server 负责控制浏览器行为,总的来说,Selenium Server 主要包括 3 个部分:Launcher、Http Proxy、Core。其中 Selenium Core 是被 Selenium Server 嵌入到浏览器页面中的。其实 Selenium Core就是一堆 JS 函数的集合,就是通过这些 JS 函数,我们才可以实现用程序对浏览器进行操作。

Launcher 用于启动浏览器,把 selnium Core 加载到浏览器页面当中,并把浏览器的代理设置为 Selenium Server 的Http Proxy。

环境搭建

selenium官网--http://www.selenium.org.cn/

1、安装Python

2、安装selenium,      

  • pip install selenium   --安装selenium      
  • pip show  selenium   --查看已安装的包的版本信息

WebDriver支持的浏览器(对应各版本,只有win10的可以直接使用)

  • 包括: Firefox Chrome IE Opera
  • Android和IOS移动应用测试
  • 驱动安装方法:将各浏览器驱动放入Python安装目录即可

IE浏览器驱动:

        web自动化测试初识(UI)_第2张图片

谷歌浏览器驱动:

        web自动化测试初识(UI)_第3张图片

通过这个脚本我们就可以使用ie浏览器来进行自动化测试了,但是启动IE需要注意以下几点:     

1:ie浏览器以32位更佳(62位系统可以下载32ie使用,部分机型会出现启动不了ie)     

2:ie浏览器要去掉所有的安全保护模式     

3:浏览器大小要保持在100%的原始宽度,不要随意更改     

4:启动ie浏览需配置ieservers和ieservers的path变量,ieservers放在ie浏览器的安装目录为佳     

5:window系统window7是较稳定的,其他系统目前不建议在工作中使用

启动Ieservers的配置方法     

a:下载Ieservers的安装包,然后放在ie的安装目录下面     

b:PATH中增加路径,比如当前在我的电脑ie的path路径在

C:\Program Files\Internet Explorer,所以我就把这个路径放在path变量中。     

d:代码启动服务:from selenium import webdriver , driver=webdriver.Ie(), driver.get(“www.baidu.com”)即可启动IE浏览器。[如果没有启动得检查你的相应配置和环境是否,或者进行代码加载设置环境也行,如下图所示:]

代码加载自动化Ie[chrome]servers的环境

        web自动化测试初识(UI)_第4张图片

webdriver  API

最大化 设置宽、高 前进、后退。

       web自动化测试初识(UI)_第5张图片

      web自动化测试初识(UI)_第6张图片

      web自动化测试初识(UI)_第7张图片

2、元素定位:

  1. id                      find_element_by_id()
  2. name                find_element_by_name()
  3. tagname           find_element_by_tag_name()
  4. classname       find_element_by_class_name()
  5. linktext             find_element_by_link_text()
  6. partialinktext   find_element_by_partial_link_text()  
  7. CSS                   find_element_by_css_selector()
  8. Xpath                find_element_by_xpath()

3、元素操作:

WebElement 接口常用方法

  1. clear()               清除元素的内容
  2. send_keys()     在元素上模拟按键输入
  3. click()                单击元素
  4. submit()            提交表单(对文字链接不适用)
  5. size                   返回元素的尺寸
  6. text                   获取元素的文本
  7. get_attribute(name)    获得属性值

     web自动化测试初识(UI)_第8张图片

4、鼠标事件:

ActionChains 类鼠标操作的常用方法:

  1. context_click()           右击
  2. double_click()            双击
  3. drag_and_drop()        拖动
  4. move_to_element()    鼠标悬停在一个元素上
  5. click_and_hold()         按下鼠标左键在一个元素上

     web自动化测试初识(UI)_第9张图片

5、键盘事件: Keys类键盘操作的常用方法:

  1. send_keys(Keys.BACK_SPACE)    删除键
  2. send_keys(Keys.SPACE)                 空格键
  3. send_keys(Keys.TAB)                      制表键
  4. send_keys(Keys.ESCAPE)              回退键
  5. send_keys(Keys.ENTER)                 回车键
  6. send_keys(Keys.CONTROL,'a')       全选
  7. send_keys(Keys.CONTROL,'c')      复制
  8. send_keys(Keys.CONTROL,'x')       剪切
  9. send_keys(Keys.CONTROL,'v')       粘贴
  10. send_keys(Keys.PAGE_DOWN)  向下滚动
  11. send_keys(Keys.PAGE_UP)         向上滚动
  12. send_keys(Keys.HOME)               到顶部
  13. send_keys(Keys.END)                  到底部

      web自动化测试初识(UI)_第10张图片

6、打印信息:

  1. title                 返回当前页面标题
  2. current_url    获取当前页面url

      web自动化测试初识(UI)_第11张图片

7、定位一组对象: webdriver 可以很方便的使用 find_element 方法来定位某个特定的 对象,不过有时候我们却需要定位一组对象,WebElement 接口同样 提供了定位一组元素的方法 find_elements 定位一组对象一般用于以下场景: 批量操作对象,比如将页面上所有的 checkbox 都勾上;先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。

        web自动化测试初识(UI)_第12张图片

8、对话框处理:使用二级定位的方式处理常见的弹出对话框

        web自动化测试初识(UI)_第13张图片

9、浏览器多窗口处理: 有时候我们在测试一个 web 应用时会出现多个浏览器窗口的情况, webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操 作不同窗口上的元素。

  1. current_window_handle   获取当前窗口句柄
  2. window_handles                获取所有窗口句柄
  3. switch_to_window()           多窗口间切换
  4. close()                                 关闭当前窗口

     web自动化测试初识(UI)_第14张图片

10、 下拉框处理: 下拉框是web页面中常用的功能,webdriver中提供了select类来处理下拉框

      1、导入select类 from selenium.webdriver.support.select import    Select 只能处理select标签下的元素

       web自动化测试初识(UI)_第15张图片

11、 alert/confirm/prompt 处理:

使用switch_to_alert()方法定位alert/confirm/prompt

  1. text   返回alert/confirm/prompt 中的文字信息
  2. accept()  接受现有警告框
  3. dismiss()  解散现有警告框
  4. send_keys()  发送内容到警告框

12、 上传文件: webdriver未提供专门用于上传文件的方法,通用的做法是使用 AutoIt上传文件

         web自动化测试初识(UI)_第16张图片

使用AutoIt上传文件

  1. ControlFocus()   识别Windows窗口
  2. WinWait()  设置等待时间
  3. ControlSetText()  设置上传文件路径
  4. ControlClick()    点击按钮
  5. sleep()  设置休眠时间

13、 操作浏览器滚动条: WebDriver未提供操作浏览器滚动条的方法,可以借助JavaScript代 码和物理按键来控制滚动条。 WebDriver提供了execute_script()方法来执行JavaScript代码。

     web自动化测试初识(UI)_第17张图片

    web自动化测试初识(UI)_第18张图片

14、 截图: 自动化测试用例是由程序去执行的,因此有时候打印的错误信息不是 十分准确。如果在脚本执行出错的时候能对当前窗口截图保存,那么 通过图片可以很直观的看出出错的原因 WebDriver提供了get_sreenshot_as_file( )函数来对当前窗口截图

  web自动化测试初识(UI)_第19张图片

15、 验证码: 对于测试来说,不管是性能测试还是自动化测试,验证码都是一个比 较棘手的问题。在WebDriver中没有提供相应的方法来处理验证码。

再次提供处理验证码的几种常见方法 :

1、关闭验证码(最简单)

2、设置万能码

3、Python-tesserct识别图片验证码(准确率不能达到100%)

4、编辑cookie信息绕过验证码

16、案例

以百度首页为例编写一个简单的自动化脚本:

from selenium import webdriver
import time

# 驱动浏览器
driver = webdriver.Chrome()
# 浏览器窗口最大化
driver.maximize_window()
# 获取驱动地址
driver.get('http://www.baidu.com')
time.sleep(3)
print("网站的名称:",driver.title)  # 打印标题driver.title
# 找到输入框定位,这里根据id定位,并输入测试内容,当然这个测试内容也可以写在文档里面进行调用。
driver.find_element('id','kw').send_keys('软件测试')
time.sleep(2)
# 输入测试内容后,定位到搜索事件按钮并进行事件提交
driver.find_element('id','su').click()
time.sleep(5)
driver.quit()  # 关闭浏览器

对文件多个内容进行验证


from selenium import webdriver
import time

# 驱动浏览器
driver = webdriver.Chrome()
# 浏览器窗口最大化
driver.maximize_window()
# 获取驱动地址
driver.get('http://www.baidu.com')
time.sleep(3)
print("网站的名称:",driver.title)  # 打印标题driver.title
# 通过调用外界文本文件对输入框进行测试,读取的每一行都会装在一个列表里面,通过遍历取出每一个值进行验证,
# 这里key_words.txt文本放在相对路径下的。
for words in open(r'key_words.txt', 'r').readlines():
    # 找到输入框定位,这里根据id定位,并输入测试内容,当然这个测试内容也可以写在文档里面进行调用。
    driver.find_element('id', 'kw').send_keys(words)
    time.sleep(2)
    # 输入测试内容后,定位到搜索事件按钮并进行事件提交
    driver.find_element('id', 'su').click()
    time.sleep(5)
    driver.find_element('id', 'kw').clear()  # 清除浏览器输入框内容

driver.quit()  # 关闭浏览器

 

你可能感兴趣的:(Python)