关键字驱动实现web自动化
接口自动化测试步骤几乎是一样的,可以用excel写测试用例,通过ddt实现数据驱动,而web自动化不符合测试步骤一致的要求,用ddt实现数据驱动并不理想,这时候可以使用关键字驱动实现web自动化。
一、封装浏览器操作
browser.py,我放在了common包下面
import allure
from selenium.webdriver import Chrome
from selenium.webdriver import ActionChains, Keysclass Browser:def __init__(self,driver:Chrome):self.driver = driverself.action = ActionChains(driver)def visit(self,url):"""访问网页"""self.driver.get(url)def click(self,locator):"""浏览器点击"""el = self.get_element(locator)el.click()def send_keys(self,locator,text):""" 在输入框中输入信息"""el = self.get_element(locator)el.send_keys(text)def get_element(self,locator):"""查找元素"""try:return self.driver.find_element(*locator)except Exception as e:self.attach_screenshot("没有找到元素")raise edef attach_screenshot(self,pic_name="截图"):"""截图"""png = self.driver.get_screenshot_as_png()allure.attach(png,name=pic_name,attachment_type=allure.attachment_type.PNG)def press_enter(self):"""回车"""self.action.send_keys(Keys.ENTER).perform()
二、创建浏览器对象
conftest.py,创建夹具,把浏览器对象放进去
import pytest
from selenium import webdriver
from selenium.webdriver.chromium.options import ChromiumOptions
@pytest.fixture()
def browser():"""创建一个浏览器对象"""option = ChromiumOptions()option.page_load_strategy = 'eager' # 设置浏览器的属性,不等所有的元素页面加载完成driver = webdriver.Chrome(options=option)driver.implicitly_wait(8)driver.maximize_window()yield driverdriver.quit()
三、用yaml文件写测试用例
一个用例一个yaml文件(里面可以写列表和字典,使用数据很方便)login_baidu.yaml,我用的百度登录
-action : visitinput :url : "https://www.baidu.com/"-action: clickinput:locator:['xpath','(//a[@name="tj_login"])[2]']
-action: send_keysinput:locator:['xpath','//input[@placeholder="手机号/用户名/邮箱"]']text : "15988889999"
-action : send_keysinput :locator : ['xpath','//input[@placeholder="密码"]']text : "123"
-action : press_enterinput :
四、创建方法提取yaml测试数据,调用封装的浏览器方法执行
keywords_fun.py,我放在了cases包下面
import yaml
from common.browser import Browserdef read_yaml(file):with open(file,encoding='utf-8') as cases:data = yaml.safe_load(cases)return datadef keywords(browser,file):"""关键字测试用例"""b = Browser(browser)steps = read_yaml(file)for step in steps:method = getattr(b,step["action"]) #方法是类的属性,通过获取属性的方式获取方法if step["input"]:method(**step["input"]) #调用方法,用**解字典包获取参数else:method()
五、执行测试用例
导入keywords_fun.py中的keywords方法,将编写的yaml文件和浏览器对象(之前创建的夹具)传入,点击执行
from cases.keywords_fun import keywordsdef test_login(browser):keywords(browser=browser,file="login_baidu.yaml")
总结:
1、以上代码可以实现百度网页登录
2、注意点:浏览器操作封装,pytest夹具的创建,根据yaml文件中的action字段调用浏览器方法
关键字驱动实现web自动化相关推荐
- Web自动化测试(一)—— Web自动化入门
其他Web测试知识参考:Web自动化测试 目录 一.自动化介绍 1.什么是自动化 2.什么是自动化测试 2.1.自动化测试能解决什么问题? 2.2.自动化测试相关知识 3.什么是Web自 ...
- web自动化--python+selenium自动化
目录 自动化测试用例 遵循原则 自动化测试用例设计 测试点转为测试用例的原则 验证码自动化方法 自动化测试模型 线性测试 模块化驱动测试 数据驱动测试 参数化的方式: CSV文件 Excel文件 关键 ...
- Selenium自动化框架:数据驱动、关键字驱动和混合
什么是Selenium框架? 这个 Selenium框架 是一种代码结构,它使代码维护变得简单而高效.如果没有框架,用户可以将"c"框架产生了一些有益的结果,比如增加了代码可重用性 ...
- 【Web自动化测试——代码篇十二】自动化测试模型——数据驱动测试和关键字驱动测试...
自动化测试模型可以看作自动化测试框架与工具设计的思想.随着自动化测试技术的发展,演化为以下几种模型: 线性测试 模块化驱动侧式 数据驱动测试 关键字驱动测试 数据驱动测试 前一篇所讲的模块化驱动测试能 ...
- 自动化测试里的数据驱动和关键字驱动思路的理解
初次接触自动化测试时,对数据驱动和关键字驱动不甚理解,觉得有点故弄玄须,不就是参数和函数嘛!其实其也体现了测试所不同与开发的一些特点(主要指系统测试),以及和对技术发展的脉络的展现. 1.录制/回放的 ...
- Robot Framework 实战中学习(Web自动化)
Robot Framework 自动化框架可以实现的功能及其丰富,首先从Web自动化开始总结学习(由于引用Selenium2Library,因此与Selenium页面元素定位及操作类似),后面也会依次 ...
- Selenium Web 自动化 - 项目实战(三)
Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述 2 框架更改总览 3 框架更改详解 3.1 解析新增页面目录 3.2 解析新增测试用例目录 ...
- git关闭密码自动存储_RobotFramework实战篇PC端web自动化demo及持续集成
自己学习自动化的话,除了要选好一款框架之外,还要选好一个用来练习的项目.这里小编推荐新手入门可以考虑一下Robotframework这个框架,原因:该框架的学习成本比较低,很多功能都是现成的,而且脚本 ...
- 十年测开如何理解自动化测试里的数据驱动、关键字驱动思路
初次接触自动化测试时,对数据驱动和关键字驱动不甚理解,觉得有点故弄玄须,不就是参数和函数其嘛!其实其也体现了测试所不同与开发的一些特点(主要指系统测试),以及和对技术发展的脉络的展现. 01.录制/回 ...
最新文章
- POJ 1860 Currency Exchange
- 5 加盐_小葱拌豆腐的5种做法,收藏起来慢慢学!
- Android NDK学习笔记5:引用类型管理
- vue 子级拿值_vue 父组件通过$refs获取子组件的值和方法详解
- Jupyter Notebook安装 nbextensions 插件
- JQuery和JavaScript常用方法的一些区别
- matlab在图像处理中的应用论文,MATLAB在数字图像处理中的应用
- Git异常:fatal: could not create work tree dir 'XXX': No such file or directory
- GBDT 特征提取(2)
- web压力测试工具(持续更新)
- MATLAB--数字图像处理 频域图像分析
- 关于simulink仿真中出现的积分器问题
- 图像处理网络资源【转】
- Facebook改名,元宇宙非区块链不可
- FPGA仿锆石代码风格组合电路时序电路严格分开之(一)8通道16位AD采集
- httpwatch详解
- 字节日常实习生面试 无了~
- 关于Wasserstein GAN的理解
- 从前慢-深入理解JVM-篇章2
- 字符型指针,数组,字符串赋值