第20章:python自动化——关键字驱动类实现

2023-11-13

目录

一、关键字驱动设计模式介绍

二、关键字驱动设计模式原理

三、关键字驱动设计模式代码实现

1.逻辑代码web_keys.py文件内容

2.测试代码web_test.py文件内容

四、总结


一、关键字驱动设计模式介绍

在自动化测试中,分为两种应用方式
第一种叫做线性代码的模式,是所有的学习者以及新手对于自动化的认知。
第二种方式是基于框架的形态来完成,所谓框架其实就是一个完整的工程结构,具备有各类功能,满足企业实际各方功能需求的一个项目工程。

市场主流的自动化测试框架设计,分为POM关键字驱动
主要是为了解决不同的需求而实现的不同设计模式

测试框架在实际工作中是一种灵活的内容,会结合企业的实际需要来实现具体功能。

关键字驱动,最为传统的设计模式。最初就是基于工具的交互形态来实现的。
冗余是非常常见的现象,关键字驱动的设计模式可以极大地降低代码的冗余。

例如:

 def 刷1(学员):
   if 学员听懂了:
     return 1
   else:
     return 懵逼

框架,可以更好地精简代码,而且可以更好地维护代码。
关键字驱动设计模式是最适合以一对多的测试框架。
POM更适合项目的一对一设计,将每个流程封装在不同的py文件中。

框架不是固定的,是非常灵活的内容,会结合企业的实际需要来实现具体的功能。

二、关键字驱动设计模式原理

测试框架基本原理:

  • 代码与数据分离

  • 逻辑代码与测试代码要分离

关键字驱动类就是Selenium的操作行为代码的封装,这是错误的。

关键字驱动类,是行为的封装,重点在封装二字。

关键字驱动类除去封装基本的操作行为之外,还可以实现流程的关键字封装,在整个框架设计上,封装的定义不是固定的。

三、关键字驱动设计模式代码实现

逻辑代码和测试代码的分离,新建逻辑代码和测试代码
逻辑代码web_keys.py文件,测试代码web_test.py文件

1.逻辑代码web_keys.py文件内容

关键字驱动:逻辑代码
        webui全部是基于selenium来实现的。selenium就是一个巨大的商城,很多东西我们用不上
        我们只取自己需要的工具,就可以了
逻辑代码,就类似于一个工具箱,需要什么东西,就在selenium商城去取,将常用的操作进行封装,以便调用
        封装关键字需要提高复用性,提升维护性降低维护成本。

import time

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.support.wait import WebDriverWait


def opt():
    options = webdriver.ChromeOptions()
    # 页面加载策略
    options.page_load_strategy = 'normal'
    # 窗体最大化
    options.add_argument('start-maximized')


def open_browser(type_):
    try:
        driver = getattr(webdriver, type_.capitalize())(options=opt())
    except Exception as e:
        print(e)
        driver = webdriver.Chrome()
    return driver


class Webkeys:
    # 临时driver对象
    # driver = webdriver.Chrome()
    def __init__(self, type_):
        self.driver = open_browser(type_)
        self.driver.maximize_window()
        self.driver.implicitly_wait(5)

    # 访问url
    def open(self, url):
        self.driver.get(url)

    # 元素定位,要满足不同的定位需求,将定位到的元素进行返回,方便后面调用
    def locator(self, by, value):
        return self.driver.find_element(by, value)

    # 输入
    def input(self, by, value, txt):
        el = self.locator(by, value)
        el.clear()
        el.send_keys(txt)

    # 点击
    def click(self, by, value):
        self.locator(by, value).click()

    # 关闭
    def quit(self):
        self.driver.quit()

    # 强制等待
    def wait(self, time_):
        time.sleep(time_)

    # 显示等待
    def driver_wait(self, by, value, time_=5):
        WebDriverWait(self.driver, time_, 0.5). \
            until(lambda element: self.locator(by, value), message='显示等待失败')

    # 鼠标悬停
    def action(self,by,value):
        ActionChains(self.driver).move_to_element(self.locator(by,value)).perform()

    # 输出标签页标题
    def title(self):
        print(self.driver.title)

    # 句柄切换,关闭第一个标签页
    def window_switch(self):
        handles = self.driver.window_handles
        self.driver.close()
        self.driver.switch_to.window(handles[1])

    # 句柄切换,不关闭第一个标签页
    def window_switch_old(self):
        handles = self.driver.window_handles
        self.driver.switch_to.window(handles[1])

2.测试代码web_test.py文件内容

测试代码管理:将所有需要执行的测试流程,放在此文件中,进行统一管理
    测试代码文件是可以有多个的,根据业务需要,以及代码管理需要进行文件的批量化管理即可
    测试代码脱离了逻辑代码之后,是没有任何价值的。

from time import sleep

from selenium import webdriver
from selenium.webdriver import Keys, ActionChains
from selenium.webdriver.support.select import Select
from class21.web_keys import Webkeys

# 创建一个chrome浏览器、
wk = Webkeys('chrome')

# 打开登录登录页面
wk.open('http://hzp.fecmall.com/customer/account/login')
# 输入账号和密码
wk.input('id', 'email', '2314419713@qq.com')
wk.input('id', 'pass', '123456')
wk.click('xpath', '//span[text()="登录"]')
wk.wait(10)

# 鼠标悬停到婚礼,选择婚礼礼服
wk.action('xpath', '//a[text()="婚礼"]')
wk.click('xpath', '//a[text()="婚礼礼服"]')

# 点击选择婚礼礼服
wk.click('xpath', '//img[@class="js_lazy"]')

# 选择绿色的礼服
wk.click('xpath', '//a[@class="current"]/span/img')
wk.click('xpath', '//span[text()="L"]')
wk.locator('xpath', '//input[@class="qty"]').clear()
wk.input('xpath', '//input[@class="qty"]', '3')
wk.click('xpath', '//span[text()="加入购物车"]')

# 点击继续支付
wk.click('xpath', '//span[text()="继续支付"]')

wk.wait(6)

if wk.locator('xpath', '//*[@class="address_list"]'):
    # 支付订单
    wk.click('link text', '支付订单')

else:
    # 填写收货地址
    wk.input('id', 'billing:telephone', '13297912971')
    wk.input('id', 'billing:street1', '武汉市')
    wk.input('id', 'billing:street2', '黄志平家里')

    # 选择国家的select
    country = Select(wk.locator('id', 'billing:country'))
    country.select_by_value('CN')

    # 收货地址城市
    state = Select(wk.locator('id', 'address:state'))
    state.select_by_visible_text('湖北省')
    wk.input('id', 'billing:city', '黄志平家里')
    wk.input('id', 'billing:zip', '430000')
    # 支付订单
    wk.click('link text', '支付订单')

try:
    wk.locator('xpath', '//h2[@class="sub-title"]')
except:
    wk.title()
    wk.driver.save_screenshot('./1.png')

sleep(10)

wk.quit()

四、总结

本章主要学习的是关键字驱动的学习,将常用的一些操作,进行封装,这就是逻辑代码,专门用一个文件进行管理。测试代码专门用一个文件进行管理。

逻辑代码,不涉及数据。测试代码,不涉及逻辑。分开管理,方便维护。

代码和数据的分离,在后面也会讲到。下一章讲解的EXCEL数据驱动就是数据分离的一种形式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第20章:python自动化——关键字驱动类实现 的相关文章

随机推荐

  • ctfshow-WEB-web11( 利用session绕过登录验证)

    ctf show WEB模块第11关用session中保存的密码进行登录验证 将 session中保存的密码清空即可绕过 页面中直接给了源码 很明显是让我们进行代码审计 源码中将我们输入的密码与 session中保存的密码进行匹配 两个pa
  • stata F值缺失_stata操作问题实录

    一 数据整理 1 新变量带原变量的标签 sysuse auto clear gen m mpg 新建的变量m没有了标签 我想要标签 clonevar Mpg mpg 直接用clonevar命令就好了 2 下载时候就应该直接选合并报表 ege
  • 【Uniapp】base64图片资源转为本地图片,解决canvas不支持base64问题

    通过接口获取到base64类型的二维码 把二维码放到canvas里生成海报 遇到的问题 在微信小程序开发工具中能够正常显示海报 到真机上测试就无法显示二维码 原因 因为canvas不支持base64 其次在使用小程序 canvas 的 dr
  • Logistic回归实战篇之预测病马死亡率(三)

    作 者 崔家华 编 辑 李文臣 四 使用Sklearn构建Logistic回归分类器 开始新一轮的征程 让我们看下Sklearn的Logistic回归分类器 官方英文文档地址 http scikit learn org dev module
  • Python 自动发送邮件详细教程

    自动发送邮件能应用于许多场景中 比如我想要知道股票策略中的股票池是否有实时的更新 这时候如果再拉一遍数据 跑一遍脚本 实在是太浪费时间了 为什么不把这一套流程放到服务器上 然后到点自动运行并发送邮件呢 类似的应用场景还有很多 不仅仅是在股票
  • Cocos2dx中文乱码问题

    最开始在网上找的一个方法 结果在wp8上报错 在windows环境下使用visual studio 开发cocos2d x 由于visual studio 默认编码为GBK 格式 而cocos2d x引擎默认编码为UTF 8 如果有用到中文
  • 从输入网址(URL)到页面加载的全过程

    从输入网址 URL 到页面加载的全过程 简述 输入网址到页面加载的过程涉及知识点众多 所以这里整理一下自己看过的相关文章内容 在浏览器中输入URL 在浏览器中输入URL 也就是网址 URL是Uniform Resource Locator的
  • Queue基本概念

    概念 Queue是一种先进先出的数据结构 他有两个出口 队列容器允许从一段新增元素 从另一端移除元素 队列中只有队头和队尾可以被外界使用 因此队列不允许有遍历行为 队列中进数据称为 入队push 队列中出数据称为 出队pop queue常用
  • Objective-C中的继承与多态, Category, Extension

    1 继承与多态 先要理解实例变量的作用域 再看继承 即 子类的方法和属性 从父类继承得到的方法和属性 子类新增的方法和属性 例子 Person h import
  • 浅谈Log4j和Log4j2的区别

    相信很多程序猿朋友对log4j都很熟悉 log4j可以说是陪伴了绝大多数的朋友开启的编程 我不知道log4j之前是用什么 至少在我的生涯中 是log4j带我开启的日志时代 log4j是Apache的一个开源项目 我们不去考究它的起源时间 但
  • 微信小程序如何刷新当前页面

    微信小程序是一种快速发展的移动应用程序开发平台 它提供了许多功能和特性 使开发者能够轻松创建功能丰富的小程序 在开发小程序时 有时我们需要刷新当前页面来更新数据或重新加载页面内容 本文将解释如何在微信小程序中刷新当前页面的代码 引言 微信小
  • Qt5.15.2 Webassembly源码裁剪编译

    第一步 configure debug and release opensource prefix D qt everywhere src compFile platform win32 g nomake examples 第二步 ming
  • 神了!7行代码建起360亿的支付帝国

    点击上方 小詹学Python 选择 星标 公众号 超级无敌干货每日12 00推送给你 大数据文摘出品 来源 medium 编译 lin 夏雅薇 去年 根据CBInsights和普华永道联合发表的MoneyTree 2019Q1报告显示 支付
  • 通过同花顺股票程序化交易接口的止损方法有哪些?

    今天我们就一起来看一下同花顺股票程序化交易接口的止损方法 止损方法主要分为三种 定额止损法 技术止损法以及无条件止损法 下面我们就一个一个的来学习 一 定额止损法 顾明思议这是一种最简单的止损方法 其本质就是将亏损额设定为一个固定的比例 如
  • Java IO流、输入流和输出流总结

    Java流类结构图 流的概念和作用 流是一组有顺序的 有起点和终点的字节集合 是对数据传输的总称或抽象 即数据在两设备间的传输称为流 流的本质是数据传输 根据数据传输特性将流抽象为各种类 方便更直观的进行数据操作 IO流的分类 根据处理数据
  • python xgboost 导入失败_无法在Python中导入xgboost

    我已经成功地使用pip for python2 7 16安装了xgboost 我在macOS High Sierra上使用自制程序安装了这个Python版本 我的问题是无法在Python中导入xgboost 错误消息如下 mac 12864
  • 【翻译】为什么你的活动需要一个行为准则,你需要执行它

    会议的开幕词是一个特别关键的时刻 无论你的舞台是实体的还是虚拟的 其实都不重要 重要的是设定正确的基调 分享有用的信息以提高每个人的经验 让你的听众参与进来 感到兴奋和安全 这些感觉只是保证你的会议成功的一半 另一半来自于伟大的内容和创意
  • 作业2018.12.9日,第1题:使用循环输出:100、95、90.....10、5

    使用循环输出 100 95 90 10 5 int n 100 while n gt 0 if n 5 0 System out println n n
  • 就是这么简单!破解激活AutoCAD 2019 for mac v2019.0.1(附图文讲解)

    AutoCAD是大家都熟悉的软件了 广泛应用于机械设计 工业制图 工程制图 土木建筑 装饰装潢 服装加工等多个行业领域 使用Mac的朋友 AutoCAD 2019 Mac支持演示的图形 渲染工具和强大的绘图及三维打印功能 让您的设计将会更加
  • 第20章:python自动化——关键字驱动类实现

    目录 一 关键字驱动设计模式介绍 二 关键字驱动设计模式原理 三 关键字驱动设计模式代码实现 1 逻辑代码web keys py文件内容 2 测试代码web test py文件内容 四 总结 一 关键字驱动设计模式介绍 在自动化测试中 分为