自动化测试1--selenium

一.概念:

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

二.分类:

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 webdriver
import time
class 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)
	
	# 获取定位到的元素中的文本内容<a>xxx</a>
	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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值