自动化测试——selenium

自动化测试——selenium

  • selenium
      • 概念
      • 基本用法 流程
      • 元素定位
      • 步骤
      • 元素用法
      • selenium IDE: 录制回放功能,转换多种编程语言的脚本
        • selenese指令集合
        • 保存脚本
        • 编辑脚本
      • selenium RC:
      • selenium Grid:

selenium

概念

  • web自动化测试工具
  • WebDriver 的 Python 绑定
  • 原理:调用浏览器原生接口操作浏览器。通过创建webdriver对象,对象调用webdriver API访问浏览器 核心是HTTP请求。
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BjnXE8fL-1633422840811)(C:\Users\ZMLin\AppData\Roaming\Typora\typora-user-images\image-20210508001948670.png)]

基本用法 流程

环境搭建

①. 基于Python环境搭建,安装selenium包,pip install selenium(2.48.0)

②. 本地安装浏览器驱动,驱动下载完的chromedriver.exe放在chrome安装路径下的application下,并将该路径添加到path环境变量

  • 示例代码

    # 1. 导包
    from selenium import webdriver
    from time import time
    # 2. 创建浏览器驱动对象
    # Firefox浏览器: 
    driver = webdriver.Firefox()
    # Chrome浏览器: 
    driver = webdriver.Chrome()
    # Edge浏览器: 
    driver = webdriver.Edge()
    # 3. 打开Web页面
    driver.get("http://www.baidu.com/")
    # 4. 暂停
    time.sleep(3)
    # 5. 关闭驱动对象
    driver.quit()
    

元素定位

  • 元素定位就是通过元素的信息或元素层级结构来定位元素的
  • 结合浏览器开发者工具f12**,快速定位元素,** 查看元素信息
  • Selenium提供了八种定位元素方式
    • id 是唯一的,元素不共享
    • name名字,元素之间可以共享,类似人与人之间重名
    • class_name类,一个元素可以属于多个class
    • tag_name HTML本质就是由不同的tag组成, 每一种标签一般在页面中会存在多个, 所以不方便进行精确定位,一般很少使用
    • link_text 为超链接的全部文本内容
    • partial_link_text可以使用局部来匹配元素, 也可以使用全部文本内容匹配元素
    • XPath ①路径-定位 ②利用元素属性-定位 ③属性与逻辑结合-定位④层级与属性结合-定位
    • CSS id选择器、class选择器、元素选择器、属性选择器、层级选择器**

步骤

  1. 导入selenium包 --> from selenium import webdriver
  2. 导入time包 --> import time
  3. 实例化浏览器驱动对象 --> driver = webdriver.Firefox()
  4. 打开注册A.html --> driver.get(url)
    • WebDriver会等待页面完全加载完(就是onload函数被触发了),才把程序的控制权交给你的测试或者脚本。 但是如果你的页面用了太多的AJAX,那么这个机制就没什么卵用了,因为它不知道页面到底是什么时候加载完。如果你需要确定页面完全加载完了,你可以使用waits
  5. 调用id定位方法 --> element = driver.find_element_by_id("")
  6. 使用send_keys()方法输入内容 --> element.send_keys(“admin”)
  7. 暂停3秒 --> time.sleep(3)
  8. 关闭浏览器驱动对象 --> driver.quit()
    • quit() 退出浏览器
    • close() 关闭一个标签页

元素用法

浏览器、元素操作

1. 常见的元素三类操作

① 需要让脚本模拟用户给指定元素输入值 send_keys(value)

② 需要让脚本模拟人为删除元素的内容 clear()

③ 需要让脚本模拟点击操作 click()

2. 常见的浏览器操作**,示例,driver.maximize_window()**

maximize_window() 最大化浏览器窗口 --> 模拟浏览器最大化按钮

set_window_size(width, height) 设置浏览器窗口大小 --> 设置浏览器宽、 高(像素点)

③ set_window_position(x, y) 设置浏览器窗口位置 --> 设置浏览器位置

back() 后退 --> 模拟浏览器后退按钮

forward() 前进 --> 模拟浏览器前进按钮

⑥ refresh() 刷新 --> 模拟浏览器F5刷新

close() 关闭当前窗口 --> 模拟点击浏览器关闭按钮

quit() 关闭浏览器驱动对象 --> 关闭所有程序启动的窗口

title 获取页面title

current_url 获取当前页面UR

3. 获取元素常见信息

size 返回元素大小

text 获取元素的文本

get_attribute(“xxx”) 获取属性值, 传递的参数为元素的属性名

is_displayed() 判断元素是否可见

is_enabled() 判断元素是否可用

is_selected() 判断元素是否选中, 用来检查复选框或单选按钮是否被选中

4. 模拟鼠标操作

说明: 在Selenium中将操作鼠标的方法封装在ActionChains类中

  • ActionChains鼠标键盘操作

实例化对象:

action = ActionChains(driver)

方法:

l context_click(element) 右击 --> 模拟鼠标右键点击效果

l double_click(element) 双击 --> 模拟鼠标双击效果

l drag_and_drop(source, target) 拖动 --> 模拟鼠标拖动效果

l move_to_element(element) 悬停 --> 模拟鼠标悬停效果

l perform() 执行 --> 此方法用来执行以上所有鼠标操作

为了更好的学习其他方法, 我们先学习perform()执行方法,因为所有的方法都需要执行才能生效

1. 导包:  from selenium.webdriver.common.action_chains import ActionChains   2. 实例化ActionChains对象: action = ActionChains(driver)   3. 调用右键方法:  action.context_click(element)   4. 执行:  action.perform()  

5. 模拟键盘输入

常用的键盘操作:

l send_keys(Keys.BACK_SPACE) 删除键(BackSpace)

l send_keys(Keys.SPACE) 空格键(Space)

l send_keys(Keys.TAB) 制表键(Tab)

l send_keys(Keys.ESCAPE) 回退键(Esc)

l send_keys(Keys.ENTER) 回车键(Enter)

l send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)

l send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)

导包: from selenium.webdriver.common.keys import Keys from selenium import webdriver driver = webdriver.Firefox() driver.get(url) element = driver.find_element_by_id("") element.send_keys(Keys.ENTER)

  • 等待
    • 显式等待:明确等待条件,指定元素
    • 隐式等待:无明确开始条件,全局范围的等待,对所有元素都设置等待时间
  • 上传与下载
    • 不浏览本地文件,直接下载和上传
    • fileInput.send_Keys()、urllib.urlretrieve()

下拉框的选择、弹出框、多窗口切换

selenium IDE: 录制回放功能,转换多种编程语言的脚本

selenese指令集合

  • action:页面操作
    • open、click、type、sendkeys
  • Asseritons:断言检查点
    • assertLocation、assertTitle、assertValue…
  • Verify:验证检查
    • verifyTitle、verifyTestPresent、verifyVisible…
  • wait:延迟等待(IDE最大等待时间是30s)
    • clickAndWait、typeAndWait、waitForVisible…

保存脚本

  • 可以将一系列脚本保存为一个Test Suit
  • Test Case连接点进去是HTML 表格

编辑脚本

  • 编辑调试:insert new command 可以直接插入步骤
  • 可以暂停和逐步执行、添加断点
  • 模糊匹配:*. 匹配任意;[ 阿3a-z]匹配括号规则
  • 正则表达式:regexp
  • rollup:提取相同公共的部分

selenium RC:

  • JAVA编写的服务端,处理测试脚本发送的HTTP请求,来操作浏览器

selenium Grid:

  • 支持分布式测试,不同平台、浏览器的多台远程设备同时运行脚本,提高效率
  • 原理:一个hub节点+若干Node节点;hub管理node,并接受远程调用请求,在把请求命令转发给Node。
  • 原理实际与通过selenium sever调用一样,知识环境启动的方式不一样
  • 步骤:
    • 终端启动hub
    • 终端启动node(若要为hub启动多个node,要为每个node分配不同的端口)
    • 查看grid状态
    • 运行代码

你可能感兴趣的:(selenium,python,html)