web自动化基础

自动化
作用:多用于回归测试,用代码执行重复的工作

工具:
Python + selenium(框架) + unittest + HtmlTestRunner

selenium:web测试框架,封装了各大浏览器驱动的api

unittest:单元测试框架,加载所有用例,执行

HtmlTestRunner:生成Html格式测试报告

类别:
接口自动化
web自动化
app自动化

web自动化:

元素定位:
id定位 id=kw
name定位 name=wd
class定位 class=s_ipt
link_text定位 文本定位
tag_name定位 标签定位
xpath定位:
// 相对路径
/ 绝对路径
. 当前节点
contains:包含 "//a[contains(@id,‘kw‘)]"
starts-with 元素以什么开头 ‘//input[starts-with(@name,‘w‘)]‘

浏览器操作:
最大化浏览器 d.maximize_window()
关闭当前句柄所对应的窗口 d.close()
退出 浏览器并结束cheomedriver进程 d.quit()
打开url d.get()
获取当前页面title d.title
浏览器前进 d.forward()
浏览器后退 d.back()
浏览器刷新 d.refresh()
获取当前页面的url d.current_url
获取浏览器名称 d.name
截屏 d.get_screenshot_as_file("")

页面元素对象操作:
click() 点击
send_keys(str) 输入
tag_name 获取标签名
text 获取标签文本
clear 清空对象内容
get_attribute(属性) 获取元素对象的属性
is_displayed() 判断页面元素是否可见,返回布尔值

框架切换:
d.switch_to.frame("")
d.switch_to.default_content()

句柄切换:
a.switch_to.window(a.window_handles)

等待时间:
强制等待
time.sleep(秒数)

隐性等待
implicitly_wait(秒数) 在规定时间内等待页面所有元素加载完成,超过所设定的秒数则报错

显性等待
b=WebDriverWait(webdriver,timeout,频率)
b.unti(函数,message="")
until内部会执行传入的函数,会在所设定的时间内按设定的频率进行检测元素是否被加载,若加载,则定位,否则报错

键盘事件:
导入from selenium.webdriver.config.keys import Keys

通过selenium模拟键盘操作
模拟全选:
c=wait.until(lambda x:x.find_element_by_id(‘kw‘))
c.send_keys("游戏人生")
c.send_keys(Keys.CONTROL,"a")

模拟回车:
c=wait.until(lambda x:x.find_element_by_id(‘su‘))
c.send_keys("游戏人生")
c.send_keys(Keys.ENTER)

鼠标事件:
导入 from selenium.webdrive.config.action_chains import ActionChains

鼠标双击:
b=a.find_element_by_id("kw")
b.send_keys("游戏人生")
ActionChains(a).double_click(b).perform()

鼠标移动:
b=a.find_element_by_xpath(‘//*[@id="u1"]/a[8]‘)
time.sleep(1)
ActionChains(a).move_to_element(b).perform()

鼠标右键:
b=a.find_element_by_id("kw")
b.send_keys("游戏人生")
ActionChains(a).context_click(b).perform()
下拉框定位:
b.find_element_by_xpath(‘//*[@id="nr"]/option[2]‘).click()

弹窗:
定位弹窗:a.find_element_by_xpath(‘//*[@id="gxszButton"]/a[1]‘).click()
接收弹窗:c=a.switch_to.alert
接收警告信息:c.accept()
对弹窗内的对话框输入内容:c.send_keys()
取消弹窗:c.dismiss()

滚动条滑动:
坐标滑动:
js="document.documentElement.scrollTop=800"
a.execute_script(js)

元素定位滑动:
b=a.find_element_by_xpath(‘//*[@id="6"]/h3/a‘)
c="arguments[0].scrollIntoView();"
a.execute_script(c,b)

文件上传:
定位、上传
a.find_element_by_xpath(‘//*[@id="form"]/span[1]/span‘).click()
time.sleep(1)
a.find_element_by_xpath(‘//*[@id="form"]/div/div[2]/div[2]/input‘) .send_keys(r‘C:\Users\Administrator\Pictures\2014121211164481.jpg‘)

获取一组元素:
通过elements,先定位,再循环
a.find_element_by_xpath(‘//*[@id="show-answer-hide"]‘).click()
time.sleep(2)
li=a.find_elements_by_xpath(‘//i[@class="ikonw-qb-new-icon icon-evaluate "]‘)
for i in li:
i.click()

ec模块(expected_conditions):
* ec.visibility_of_element_located(()):
元素可见,再执行定位,接收元祖,和显性等待结合使用
b=wait.until(ec.visibility_of_element_located(("id","kw")))
b.send_keys("游戏人生")

* ec.presence_of_element_located(()):
判断元素是否加载到DOM树,和显性等待结合使用
b=wait.until(ec.presence_of_element_located(("id","su")))
b.click()

ec.text_to_be_present_in_element(()):
判断标签的文本信息是否与传入的文本一致,返回布尔值
b=wait.until(ec.text_to_be_present_in_element(("link text","地图"),"地图"))
print(b)

ec.text_to_be_present_in_element_value(()):
判断标签的value属性是否与传入的文本相等,返回布尔值
b=wait.until(ec.text_to_be_present_in_element_value(("id","kw"),"游戏人生"))
print(b)

* ec.alert_is_present()(a):
判断页面是否存在弹窗,如果存在,直接切入弹窗,不存在,返回False
b=ec.alert_is_present()(a)
print(b)

ec.title_is():
获取页面标题,判断与传入的标题是否相等,返回布尔值
b=wait.until(ec.title_is("百度一下,你就知道"))
print(b)

* ec.frame_to_be_available_and_switch_to_it(()):
判断框架是否可以切入,能则切入框架,否则返回False
b=ec.frame_to_be_available_and_switch_to_it(("xpath","pa"))(a)
print(b)

类的装饰器:

装饰器=高阶函数 + 函数闭包+语法糖
作用:在不修改函数的调用方式的前提下,给函数怎加新功能,不修改函数的源码

@classmethod:
将类的函数属性声明为类属性,不能直接访问实例属性

@staticmethod:
将类的函数属性声明为静态属性,不能直接访问类的静态属性和函数属性以及实例属性

@property:
将类的函数属性声明为property后,调用不加括号

unittest(单元测试)框架:
继承测试类后,用例必须以test开头

导入from unittest import TestCase

class MyTest(TestCase):
@classmethod
#整个测试类启动时,先执行setUpClass,只执行一次
def setUpClass(cls):
pass

# 每个用例执行前,先执行setUp
def setUp(self):
pass

# 每个用例执行后,执行tearDown
def tearDown(self):
pass

@classmethod
# 整个测试类结束时,先执行tearDownClass,只执行一次
def tearDownClass(cls):
pass

def test_01(self):
# 判断预期结果与实际结果是否相等,不相等则抛出错误,用例执行失败
self.assertEqual("预期结果","实际结果")
#判断预期结果与实际结果是否不相等,相等则抛出错误,用例执行失败
self.assertNotEqual("预期结果","实际结果")
# 判断左边参数是否小于右边参数
self.assertLess(1,2)
# 判断实际结果是不是False
self.assertFalse(False)

PO模式:
对象层:
BasePage类封装了所有的selenium的操作(初始化、定义页面函数)

元素层:
封装页面元素 一个页面封装一个类

业务层:
业务层定义所有的类都要继承BasePage
业务层封装 项目所有业务流程
一个流程一个类

用例层:
用例层和数据、元素、业务分离
调用业务层函数,执行测试用例

原文地址:https://www.cnblogs.com/szwlycw/p/11544501.html

时间: 2024-08-01 00:11:02

web自动化基础的相关文章

Web自动化基础分享

一.Selenium 简介 Selenium 是 ThoughtWorks 专门为 Web 应用程序编写的一个验收测试工具. 与其他测试工具相比,使用 Selenium 的最大好处是: Selenium 测试直接在浏览器中运行,就像真实用户所做的一样. Selenium 测试可以在 Windows.Linux 上的 Internet Explorer.Mozilla 和 Firefox 中运行.其他测试工具都不能覆盖如此多的平台. RFS=Robot Framework + Selenium 二

Selenium基于Python web自动化基础二 -- 免登录、等待及unittest单元测试框架

一.免登录在进行测试的过程中难免会遇到登录的情况,给测试工作添加了工作量,本文仅提供一些思路供参考解决方式:手动请求中添加cookies.火狐的profile文件记录信息实现.人工介入.万能验证码.去掉验证码 1.手动在请求中添加cookies信息 1 url = "http://www.baidu.com" 2 driver = webdriver.Firefox() 3 driver.get(url) 4 time.sleep(3) 5 #添加cookies的方式 6 7 c1 =

Python自动化基础【第一篇】:目录

本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! Python自动化基础[第一篇]:目录 Python自动化基础[第二篇]:初识Python Python自动化基础[第三篇]:Python基本数据类型 Python自动化基础[第四篇]:Python基础之函数 Python自动化基础[第五篇]:Python基础之杂货铺 Python自动化基础[第六篇]:模块 Python自动化基础[第七篇]:面向对象 Python自动化基础[第

Web自动化框架搭建——前言

1.web测试功能特性 a.功能逻辑测试(功能测试),这一块所有系统都是一致的,比如数据的添加.删除.修改:功能测试案例设计感兴趣和有时间的话可以另外专题探讨: b.浏览器兼容性测试,更重要的是体验这块,想提供建设性建议,是建立在业务场景.用户使用的深刻理解基础上,然后对产品目规划理解是否合理,提出自己的看法与想法:体验这块,一定要有一个比较全局的概念,换个意思说,就是应该站在产品经理的角度去看系统,看系统的各个子功能.各个子功能协调是否合理.是否还有更优建议.而不仅仅只局限一个界面.一个菜单.

RobotFramework自动化测试框架-Selenium Web自动化(三)关于在RobotFramework中如何使用Selenium很全的总结(下)

本文紧接着RobotFramework自动化测试框架-Selenium Web自动化(二)关于在RobotFramework中如何使用Selenium很全的总结(上)继续分享RobotFramework中如何使用Selenium进行自动化测试. 本文章节目录: 1.Get Value 2.Get Webelements和Get Webelement 3.Get Window Titles 4.Go Back 和 Go To 5.Get List Items 6.Get Selected List

20145225唐振远《网络对抗》 Web安全基础实践

20145225唐振远<网络对抗>Web安全基础实践 参考博客:20145215 卢肖明 基础问题回答 (1)SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的. 防御:利用输入规则限制进行防御,过滤输入的数据,不允许特殊字符输入. (2)XSS攻击的原理,如何防御? 跨站脚本攻击,允许恶意用户将恶意Script代码注入到网页上,当用户浏览网页时,嵌入其中Web里面的Script代码

exp9《网络对抗》web安全基础实践201453331魏澍琛

201453331魏澍琛web安全基础实践 一.实验过程 1.webgoat开启 2.Injection Flaws练习 Command Injection 原网页中没有注入的地方,那就用burpsuite(设置的相关步骤别人的博客写的很详细,不累述了),分析第一个包看他的数据提交的位置,找到后进行命令的注入,成功. 我注入的命令是AccessControlMatrix.help"&&ifconfig",执行了ifconfig命令,鉴于这个可以证明是本人操作,就把他截了

web入侵基础篇

基本的命令....最基础的,为以后提权做准备 入侵基础篇.zip:http://pan.baidu.com/s/1dDhAHwd web入侵基础篇,布布扣,bubuko.com

Android笔记之 Web Service 基础

一.Web Service是什么? 就是网络服务,根据W3C的定义,WebServices(Web服务)是一个用于支持网络间不同机器互操作的软件系统,它是一种自包含.自描述和模块化的应用程序,它可以在网络中被描述.发布和调用,可以将它看作是基于网络的.分布式的模块化组件.  Web Services是建立在通用协议的基础之上的,包括HTTP.SOAP.UDDI.WSDL等.其中Web Service三要素就是SOAP.WSDL和UDDI. SOAP用来描述传递信息的格式, WSDL用来描述如何访