博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动化测试1--selenium
阅读量:2070 次
发布时间:2019-04-29

本文共 3913 字,大约阅读时间需要 13 分钟。

一.概念:

通过测试工具或者其他手段,按照测试人员的预定计划对软件产品进行测试

二.分类:

1.自动化功能测试

  • 单元测试:开发者搞定
  • 功能测试:
  • 接口测试:大中型项目或者长期项目采用自动化

2.自动化性能测试

  • 模拟请求

三.web自动化条件和使用范围

1.使用自动化的前提条件

  • 手动测试已经完成,后期在不影响进度的前提下逐渐实现自动化
  • 项目周期长,重复性的工作都交给机器实现
  • 需求稳定,项目变动不大
  • 自动化测试脚本复杂度低
  • 可重复利用

2.使用自动化的场景

  • 频繁的回归测试
  • 冒烟测试
  • 互联网迭代频繁
  • 传统行业需求变化不大,应用频繁
  • 性能测试

四.Selenium自动化测试框架

1.历史版本

  • 一代:现在基本不使用

  • 二代:主推webdriver, 是selenium RC + webdriver 的集合

  • 三代:移除selenium,只剩webdriver

    2.selenium组件

  • Selenium IDE:主要用来录屏,几乎不用

  • Selenium RC:远程控制(功能简陋)

  • Selenium WebDriver:属于RC的升级版,直接发送命令给浏览器,并检索结果,主要使用

  • Selenium Grid:网格用于运行在不同的机器,不同的浏览器同时以最小化执行时间并行测试的工具,使selenium同时运行于多个平台。

    3.RC 与 Webdriver对比

  • RC需搭建服务,webdriver直接安装驱

  • RC通过js服务与浏览器互动,速度较慢;Webdriver直接通过本地驱动,速度较快

  • RC不支持无头(不开启界面,只在内存中运行的浏览器,所谓的虚拟浏览器),而Webdriver支持;

  • webdriver面向对象

  • webdriver功能强大

  • webdriver可面向移动端,也就是可测试iphone/Andrioid应用程序

五.Selenium API基础

1.HTTPS:

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

2.断言:

  • 断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定的点该表达式为真,可以在任何时候启用和禁用断言验证,因此在测试时启用断言而在部署时禁用断言。
  • Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况。

3.Selenium的元素定位

  • id: id定位
  • name:name属性定位
  • class name:伪类名定位
  • tag name:标签名定位
  • link text:链接文本定位
  • partial link text:部分链接文本
  • xpath:xpath路径定位
  • css selector:css选择器

4.表单切换

  • 1.直接使用id值切换(推荐使用): driver.switch_to.frame(value)
  • 2.定位到表单元素,再切换进入:
    el = driver.find_element_by_xxx(value)
    driver.switch_to.frame(el)
  • 3.跳回最外面的页面
    dirver.switch_to.default_content()
  • 4.跳回上层的页面
    driver.switch_to.parent_frame()

5.弹出框操作

  • 进入到弹出框:driver.switch_to.alert()
  • 接收警告:accept()
  • 解散警告:dismiss()
  • 发送文本到警告框seed_keys(data)

6.下拉框操作

下拉框的操作到交给Select类进行处理
from selenium.webdriver.support.select import Select
selobj = Select(element) #下拉框元素传入Selement

  • 调用响应方法选择下拉框的选项
  • select_by_index()
  • select_by_value()
  • select_by_visible_text()

7.调用js代码

重要的js代码

  • js = “window.scrollTo(x, y)”
  • js = “var q=document.documentElement.scrollTop=n” n为距离
    driver.execute_script(js)

8.浏览器等待

显示等待(隔几秒扫描一次):

  • from selenium.webdriver.support.ui import WebDriverWait
  • WebDriverWait(driver, timeout, poll_frequency = 0.5, ignored_exception=None)
  • WebDriverWait类是由WebDriver提供的方法,在设置时间内,默认每隔一段时间检测一次当前元素是否存在,如果超过设置时间检测不到则抛出异常。
  • 显式等待就是在设置的时间之内,要等到满足某个元素的某个条件,该条件满足后就往下执行代码,如果超出设置的时间还没满足条件,那么就抛出Exception

隐式等待(相当于sleep):

  • driver.implicitly_wait(n) #n为等待时间

9.cookies操作

网站为了辨别用户身份、进行会话保持而存储在本地终端上的数据(通常经过加密);http为无状态协议,不对之前的访问状态做管理,也就是说无法根据之前的登录状态进行本次访问的处理。

  • get_cookies() #获取所有的cookies
  • get_cookie() #获取key对应的值
  • add_cookies(cookie_dict) #设置cookies
  • delete_cookie(name) #删除指定名称的cookie
  • delete_all_cookies() #删除所有cookie

10.封装

from selenium import webdriverimport timeclass Common(object):	#初始化	def _init_(self):		#创建浏览器		self.driver = webdriver.Firefox()		#浏览器最大化		self.driver.maximize_window()	def open_url(self, url):		self.driver.get(url)		self.driver.implicatly_wait(10)		def locateElement(self, locate_type, value):		el = None		if locate_type == 'id':			el = self.driver.find_element_by_id(value)		elif locate_type = 'name':			el = self.driver.find_element_by_name(value)		elif locate_type = 'class':			el = self.driver.find_element_by_class_name(value)		elif locate_type = 'tag':			el = self.driver.find_element_by_tag_name(value)		elif locate_type = 'text':			el = self.driver.find_element_by_link_text(value)		elif locate_type = 'partial':			el = self.driver.find_element_by_partial_link_text(value)		elif locate_type = 'xpath':			el = self.driver.find_element_by_xpath(value)		elif locate_type = 'css':			el = self.driver.find_element_by_css_selector(value)				# 返回定义到的元素		if el:			return el		def click(self, locate_type, value):		el = self.locateElement(locate_type, value)		el.click()		def input_data(self, locate_type, value, data):		el = self.locateElement(locate_type, value)		el.send_keys(data)		# 获取定位到的元素中的文本内容xxx	def get_text(self, locate_type, value):		el = self.locateElement(locate_type, value)		return el.text		# 获取定位到的元素中的标签属性	def get_att(self, locate_type, value):		el = self.locateElement(locate_type, value)		return el.get_attribute(data)		#结束的时候清理了	def _del_(self):		time.sleep(3)		self.driver.quit()

转载地址:http://mwjmf.baihongyu.com/

你可能感兴趣的文章
阿里云《云原生》公开课笔记 第三章 kubernetes核心概念
查看>>
阿里云《云原生》公开课笔记 第四章 理解Pod和容器设计模式
查看>>
阿里云《云原生》公开课笔记 第五章 应用编排与管理
查看>>
阿里云《云原生》公开课笔记 第六章 应用编排与管理:Deployment
查看>>
阿里云《云原生》公开课笔记 第七章 应用编排与管理:Job和DaemonSet
查看>>
阿里云《云原生》公开课笔记 第八章 应用配置管理
查看>>
阿里云《云原生》公开课笔记 第九章 应用存储和持久化数据卷:核心知识
查看>>
linux系统 阿里云源
查看>>
国内外helm源记录
查看>>
牛客网题目1:最大数
查看>>
散落人间知识点记录one
查看>>
Leetcode C++ 随手刷 547.朋友圈
查看>>
手抄笔记:深入理解linux内核-1
查看>>
内存堆与栈
查看>>
Leetcode C++《每日一题》20200621 124.二叉树的最大路径和
查看>>
Leetcode C++《每日一题》20200622 面试题 16.18. 模式匹配
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>