• Web自动化测试02


    本篇博客

    1.Selenium自动化测试框架
      1.1 什么是框架?
      1.2 为什么使用框架?
      1.3 Selenium概述
      1.4 Selenium工作原理(重要)
    2.Selenium概述
    3. Selenium IDE
      3.1 什么是Selenium-IDE?
      3.2 环境安装
      3.3 IDE功能简介
      3.4 案例
    4. Selenium API基础
      4.1 浏览器驱动对象
      4.2 页面操作
        4.2.1 url的格式
        4.2.2 http和https的区别
        4.2.3 DNS域名服务
      4.3 页面请求操作
        4.3.1 获取断言信息
        4.3.2 元素的定位
     

    1.Selenium自动化测试框架

    1.1 什么是框架?
    框架(framework)是一个框子——指其约束性,也是一个架子——指其支撑性。是一个基本概念上的结构,用于去解决或者处理复杂的问题。

    框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是

    从目的方面给出的定义。

    框架,其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。

    1.2 为什么使用框架?

    • 1)自己从头实现太复杂
    • 2)使用框架能够更专注于业务逻辑,加快开发速度
    • 3)框架的使用能够处理更多细节问题
    • 4)使用人数多,稳定性,扩展性好

    1.3 Selenium概述

    1.什么是Selenium?

    Selenium是ThoughtWorks公司的一个强大的开源Web功能测试工具系列,采用Javascript来管理整个测试过程,包括读入测试套件、执行测试和记录测试结果。


    2.Selenium的特点

    1)它采用Javascript单元测试工具JSUnit为核心,只要在测试用例中把预期的用户行为与结果都描述出来,我们就得到了一个可以自动化运行的功能测试套件。

    2)Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。

    3.Selenium历史
    2004年Jason Huggins开始研发Selenium核心。

    2006年Selenium RC加入了进来。

    2011年Selenium 2.0(Webdriver支持)替代了RC

    2016年10月Selenium 3.0出生。

    2.每代的变化
    1)Selenium1
    一代的selenium存在一些缺陷,但是也没有影响其功用。但是现在我们基本上已经不使用这个版本了

    2)Selenium2(下面学的是这个。)
    写作Selenium2,读作webdriver,webdriver是google的自动化测试框架(或者说是套规范API)webdriver 与seleinum 各有优点, 两个团队都认为合并会更牛逼,在Selenium 2.0中 主推的是WebDriver,于是:
    selenium 2.0 = selenium RC + webdriver。

    3)Selenium3
    支持的浏览器更多了

    1.4 Selenium工作原理

    1) selenium组件(重要)

    2) Selenium RC 与 webdriver

    3) webdriver工作原理

     

    Selenium RC 和Webdriver的区别:

    Selenium RC:需要服务器配合使用

    Webdriver:需要安装正确版本的浏览器驱动。

    4) .selenium环境搭建(详情查阅讲义)
    1.材料:

    1)python3.5(是3.6或者3.7也没关系)

    2)Firefox35 (这个版本的火狐不需要安装浏览器驱动,默认安装了。但是在这个版本之上就要自己安装了。)

    3)selenium2框架(稳定版 2.53.1)

    pip install selenium==2.53.1

    卸载:pip uninstall selenium 

    4)浏览器驱动

      chrome(下载适合自己谷歌版本的chromedriver.exe,拷到python.exe路径下,加环境变量)

      Phantomjs(无头浏览器用的不多)

      ie

    2.安装python3.5(可参考安装步奏)

    1. 点击下面箭头所指:

     2. 点击Downloads--windows

     

    3. 下面点击对应的下载就行

     

    Windows x86-64:指的是windows64位。

    Windows x86:指的是windows32位。(不知道自己的是32位还是64位,就安装32位。向下兼容的)

    embeddable zip file:解压。拷贝。用于嵌入式开发的比较多。

    executable installer:可执行安装包。(我们一般用这个比较多。)

    web-based installer:基于网络安装。

    3. Selenium IDE

    3.1 什么是Selenium-IDE?

    Selenium的IDE(集成开发环境)是一个易于使用的Firefox插件,用于开发Selenium测试案例。它提供了一个图形用户界面,用于记录使用Firefox浏览器,用来学习和使用Selenium用户操作,但它只能用于只用Firefox浏览器不支持其它浏览器。


    3.2 环境安装
    firefox官网

    3.3 IDE功能简介

    1.文件:创建、打开和保存测试案例和测试案例集。编辑:复制、粘贴、删除、撤销和选择测试案例中的所有命令。Options : 用于设置seleniunm IDE。
    2.用来填写被测网站的地址。
    3.速度控制:控制案例的运行速度。
    4.运行所有:运行一个测试案例集中的所有案例。
    5.运行:运行当前选定的测试案例。
    6.暂停/恢复:暂停和恢复测试案例执行。
    7.单步:可以运行一个案例中的一行命令。
    8.录制:点击之后,开始记录你对浏览器的操作。
    9.案例集列表。
    10.测试脚本;table标签:用表格形式展现命令及参数。source标签:用原始方式展现,默认是HTML语言格式,也可以用其他语言展示。
    11.查看脚本运行通过/失败的个数。
    12.当选中前命令对应参数。
    13.日志/参考/UI元素/Rollup

    3.4 案例:
    录制百度搜索脚本

    1.打开浏览器

    2.打开插件

    3.点击录制按钮

    4.在浏览器执行如下操作:

    • 访问百度
    • 搜索python
    • 搜索传智播客
    • 点击右侧相关人物右侧展开
    • 点击顶端百度贴吧
    • 点击精品

    5.点击录制按钮停止录制

    4. Selenium API基础

    Selenium API这部分非常重要,原因如下:

    1)api就是使用的selenium2.0主推的webdriver

    2)3.0继续要用这套API

    3)后续课程移动端功能测试用到的appium其实就是对selenium的在封装

    4.1 浏览器驱动对象

    1)库的导入

    from selenium import webdriver

    2)创建浏览器对象

    driver = webdriver.xxx()

    使用dir(driver)查看方法

    print(dir(driver))

    案例1:

    from selenium import webdriver
    
    # 创建一个浏览器对象
    driver = webdriver.Firefox()
    
    print(dir(driver))
    
    # 关闭浏览器
    driver.quit()
    # driver.close()

    注意:

    driver.close()关闭当前窗口

    driver.quit()退出驱动关闭所有窗口

    3)浏览器尺寸相关操作1

    maximize_window()    最大化
    
    get_window_size()    获取浏览器尺寸
    
    set_window_size()    设置浏览器尺寸

    案例2:
    脚本操作打开一个测试浏览器,并调整其大小

    from selenium import webdriver
    import time
    
    # 创建一个浏览器对象
    driver = webdriver.Firefox()
    
    # 设置全屏
    driver.maximize_window()
    time.sleep(3)
    
    # 获取当前浏览器尺寸
    size = driver.get_window_size()
    print(size)
    
    # 设置浏览器尺寸
    # 因为有的时候会测手机端,可以在电脑上设置手机大小的尺寸
    driver.set_window_size(400,400)
    size = driver.get_window_size()
    print(size)
    
    
    time.sleep(3)
    # 关闭浏览器
    driver.quit()
    # driver.close()

    3)浏览器位置相关操作2

    get_window_position()    获取浏览器位置
    
    set_window_position(x,y)    设置浏览器位置

    注:显示器以左上角为(0,0),所有的位置操作都是相对于显示器左上角展开的位移操作,单位是像素。

    4)浏览器的关闭操作

    close()    关闭当前标签/窗口
    
    quit()    关闭所有标签/窗口

    案例3:
    打开浏览器,调整大小,调整位置,并关闭

    from selenium import webdriver
    import time
    
    # 创建一个浏览器对象
    driver = webdriver.Firefox()
    
    
    # 获取浏览器位置
    position = driver.get_window_position()
    print(position)
    
    # 设置浏览器位置
    driver.set_window_position(100,200)
    
    time.sleep(3)
    # 关闭浏览器
    driver.quit()
    # driver.close()

    4.2 页面操作

    4.2.1 url的格式:

    形式 scheme://host[:port#]/path/…/[?query-string][#anchor]

    凡是[ ]都可以省略。

    scheme:协议(例如:http, https, ftp)

    host:服务器的IP地址或者域名

    port:服务器的端口(如果是走协议默认端口,80 or 443)

    path:访问资源的路径
    http://www.cnblogs.com/be-saber/p/4734951.html

    query-string:参数,发送给http服务器的数据,参数使用&隔开

    anchor:锚(跳转到网页的指定锚点位置)
    https://detail.tmall.com/item.htm?id=545181862652

    4.2.2 http和https的区别:

    HTTP:明文传输

    • 超文本传输协议
    • 默认端口号:80

    HTTPS:对传输内容加密

    • HTTP + SSL(安全套接字层,)
    • 默认端口号:443

    4.2.3 DNS域名服务

    DNS:域名解析(把域名解析IP地址操作)

    IP地址:4段数字

    域名(例如):www.baidu.com

    4.3 页面请求操作

    请求某个url对应的响应,url需要加协议(http://或者https://)

    driver.get(url)     

    刷新页面操作

    refresh()    

    回退到之前的页面

    back()     

    前进到之后的页面

    forward()            

    案例4:

    1)访问 http://www.baidu.com

    2)访问 https://zhuanlan.zhihu.com/

    3)回退

    4)前进

    from selenium import webdriver
    import time
    # 创建浏览器对象
    driver = webdriver.Firefox()
    
    url1 = 'http://www.baidu.com'
    driver.get(url1)
    print('访问',url1)
    
    url2 = 'https://zhuanlan.zhihu.com'
    driver.get(url2)
    print('访问',url2)
    
    # 后退操作
    time.sleep(2)
    driver.back()
    print('后退到',url1)
    
    
    # 前进操作
    time.sleep(2)
    driver.forward()
    print('前进到',url2)
    time.sleep(2)
    
    # 关闭浏览器
    driver.quit()

    4.3.1 获取断言信息

    1)什么是断言?

    断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。

    2)获取断言信息的操作:

    获取当前访问页面url,注意不需要括号。

    current_url

    获取当前浏览器标题

    title         

    保存图片:selenium2需要自己写,3的话可以加参数。

    get_screenshot_as_png()

    直接保存(推荐):可以加绝对路径,默认保存在当前路径。

    get_screenshot_as_file(file)

    网页源码

    page_source

    案例:

    1.使用current_url改造页面操作案例

    from selenium import webdriver
    import time
    # 创建浏览器对象
    driver = webdriver.Firefox()
    
    url1 = 'http://www.baidu.com'
    driver.get(url1)
    print('访问',driver.current_url)
    
    url2 = 'https://zhuanlan.zhihu.com'
    driver.get(url2)
    print('访问',driver.current_url)
    
    
    # 后退操作
    time.sleep(2)
    driver.back()
    print('后退到',url1)
    
    
    # 前进操作
    time.sleep(2)
    driver.forward()
    print('前进到',driver.current_url)

    2.访问 http://www.baidu.com,2种方法保存百度图片

    from selenium import webdriver
    
    
    # 创建浏览器对象
    driver = webdriver.Firefox()
    
    # 访问百度
    url = 'http://www.baidu.com'
    driver.get(url)
    
    print(driver.current_url)
    
    print(driver.title)
    
    # 保存快照操作
    driver.get_screenshot_as_file('baidu.jpg')
    
    # 自己写文件,保存图片
    data = driver.get_screenshot_as_png()
    with open('baidu2.jpg','wb') as f:
        f.write(data)
    
    driver.close()

    字符串类型转换(str,bytes):

    str--->  bytes    data.encode()
    bytes-> str   data.decode()

    3.使用phantomjs浏览器执行上述案例,并且保存源码。

    from selenium import webdriver
    
    
    # 创建浏览器对象
    driver = webdriver.PhantomJS(executable_path=r'F:2020软件测试第二版就业班6-20部分13_就业班之web端自动化测试(共82集)day1web自动化day012-其他资源环境安装包phantomjs-2.1.1-windowsinphantomjs.exe')
    # driver = webdriver.PhantomJS() 没有配置环境变量不行。
    
    # 访问百度
    url = 'http://www.baidu.com'
    driver.get(url)
    
    
    data = driver.page_source
    print(type(data))
    # 以二进制类型写入文件
    with open('baidu.html','wb') as f:
        f.write(data.encode())
    
    # 虽然是str类型,但是w 写不进去
    # 就用wb 二进制类型写入
    # data.encode()  str--> bytes
    
    driver.close()

    4.3.2 元素的定位(重点)

    1)元素定位方法的分类(调用方式):

    1.直接调用型(推荐方式)

    driver.find_element_by_xxx(value)

    2.使用By类型(需要导入By)

    from selenium.webdriver.common.by import By
    
    driver.find_element(By.xxx,value)    

    案例:用以上两种方式是实现百度中搜索 传智播客 

    第一种:driver.find_element_by_xxx(value)

    from selenium import webdriver
    import time
    
    # 创建浏览器对象
    driver = webdriver.Firefox()
    
    # 访问百度
    url = 'http://www.baidu.com'
    driver.get(url)
    time.sleep(1)
    
    # 定位到搜索框元素
    el = driver.find_element_by_id('kw')
    # print(el)
    # print(type(el))
    # print(dir(el))
    # 向输入框输入文字
    el.send_keys('创智博客')
    
    time.sleep(2)
    # 定位搜索点击按钮
    el_click = driver.find_element_by_id('su')
    el_click.click()
    time.sleep(2)
    
    driver.close()

    第二种:driver.find_element(By.xxx,value)   

    from selenium import webdriver
    # 导入By
    from selenium.webdriver.common.by import By
    import time
    
    driver = webdriver.Firefox()
    
    url = 'http://www.baidu.com'
    driver.get(url)
    
    # By调用的定位方式全部为大写
    el = driver.find_element(By.ID,'kw')
    # 输入搜索关键字(向可输入元素输入文本内容)
    el.send_keys('itcast')
    
    # 定位到搜索按钮
    el_sub = driver.find_element(By.ID,'su')
    # 点击元素
    el_sub.click()
    
    time.sleep(3)
    driver.close()
  • 相关阅读:
    AddDemo核心代码
    uniapp vuecli 命令行 新建项目 报错关键词:RuleSet
    java maven dependency
    java代码的执行过程
    Spring中Bean的单例和多例
    java代码的执行过程
    Condition
    Java对象初始化过程执行顺序
    线程池不推荐使用 Executors 去创建
    java线程的六种状态
  • 原文地址:https://www.cnblogs.com/zhangyangcheng/p/12489157.html
Copyright © 2020-2023  润新知