from selenium import webdriver
from common import get_case_id
from common.mongo import Mongo class Logic(object):
""" 每一个方法名对应前端的操作的元素,方便反射 """ def __init__(self):
self.mongo = Mongo() def browser(self, params):
""" 打开网页 """
url = params.get('value', None)
self.driver.get(url) def find(self, params):
""" 查找元素 接收选择器和元素内容"""
selector = params.get('selector', None)
value = params.get('value', None)
return self.driver.find_element(selector, value) def send(self, element, params):
""" 输入内容 """
text = params.get('value', "默认值")
element.send_keys(text) def click(self, element, params):
""" 点击操作 """
element.click() def close(self):
""" 关闭浏览器 """
self.driver.quit() def execute(self, data):
""" 执行测试,把前端传过来的指令映射为selenium的操作方法 """
# 防止每次调logic都初始化driver,这里放到执行时才初始化driver
self.driver = webdriver.Chrome()
# 取data的commands(所有的元素和操作的dict)
'''
{'casename': 'zz',
'commands':
[
{'command': 'browser', 'parameter': {'value': 'http://127.0.0.1:8000/automation/create'}},
{'command': 'find', 'parameter': {'selector': 'xpath', 'value': '//*[@id="command"]'}}
]}
'''
commands = data.get("commands")
# {'command': 'find', 'parameter': {'selector': 'xpath', 'value': '//*[@id="command"]'}}
element = None
for command in commands:
print(command)
# print(command['command'])
# print(command['parameter'])
cmd = command['command'] # 获取操作方法,对应selenium的方法
params = command['parameter'] # 获取参数:元素、操作对应的值
print(f"run command: [{cmd}] with param: [{params}] and element: [{element}]")
if element:
# 第二步,拿到element,对元素执行相应的操作
element = getattr(self, cmd)(element, params)
else:
# 第一步,element为空,查找元素并返回
element = getattr(self, cmd)(params) # 把操作方法反射为selenium的方法,传入params对应的参数
self.close() def save(self, data):
""" 保存功能 """
data.setdefault('_id', get_case_id())
self.mongo.insert("2019", "automation", data)
return data['_id'] def trigger(self, data):
""" 触发执行测试,用于持续集成 """
id = data.get('id')
cases = list(self.mongo.search("2019", "automation", {'_id': id}))
print(cases[0])
self.execute(cases[0])
from flask import Flask

from interface import interface
from automation import automation app = Flask(__name__) app.register_blueprint(interface)
app.register_blueprint(automation) if __name__ == '__main__':
app.run(
host="0.0.0.0",
port=8000,
debug=True,
)
 

测开之路六十六:UI测试平台之处理逻辑和蓝图添加到程序入口的更多相关文章

  1. 测开之路七十六:性能测试蓝图之html

    <!-- 继承base模板 -->{% extends 'base.html' %} {% block script %} <!-- 从cdn引入ace edter的js --> ...

  2. 测开之路八十六:python操作sqlite

    创建sqlite数据库,并创建表和数据 python自带sqlite3库可以创建数据库文件 导入库:import sqlite3 创建游标,指定数据库名字:con = sqlite3.connect( ...

  3. 测开之路七十六:linux变量和环境变量

    变量 赋值 variable=0,访问 $var或${var} 参数 $n 用``引住的会先执行(~键) 位置参数 环境变量/etc/profile:全局的环境变量 . bash_profile:用户 ...

  4. 测开之路五十六:实现类似unittest的断言

    import inspect class Case(object): """ 实现断言 """ def __init__(self): se ...

  5. 测开之路三十六:常用的css选择器

    在static下新建一个css,并写入内容 /*标签选择器,label标签的颜色为红色*/label {color: red;} /*.代表类选择器,绿色*/.test {color: green;} ...

  6. 测开之路二十六:Flask基础之最小web程序

    Flask中文文档:http://docs.jinkan.org/docs/flask/ 安装Flask库 选端口号的一种方法(避免和别人选的端口冲突,小于1024的时候重新选) 最小web程序 用1 ...

  7. 测开之路六十三:UI测试平台之视图层

    实现效果,在页面时配置 后台执行 蓝图结构 视图代码 from flask import jsonifyfrom flask import requestfrom flask import Bluep ...

  8. 测开之路一百零六:bootstrap布局

    可以在html的head里面加一些说明 <meta http-equiv="X-UA-Compatible" content="IE=edge">& ...

  9. 测开之路五十五:实现类似于unittest查找case

    实现给一个路径,去查找test开头的测试用例文件 创建一个计算器的类,方便后面测试用 class Calculator(object): def add(self, x, y): return x + ...

随机推荐

  1. 尝试Vue3.0

    Composition API 纯函数式 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  2. squid代理服务问答

    1. 简述一下squid的用途?squid可以做代理和缓存服务器,而做代理时,可以分为正向代理和反向代理.正向代理用在企业办公环境中,企业员工上网通过代理来上网,代理的缓存功能可以为企业节省宝贵的带宽 ...

  3. Maven-maven安装、Eclipse配置maven

    1.下载maven安装包,下载完成,解压到安装路径. 2.配置环境变量 3.修改setting.xml配置本地库,阿里云中央仓库 路径:C:\fyliu\software\apache-maven-3 ...

  4. Log4Net 之将日志记录到数据库的配置 (一)

    原文:Log4Net 之将日志记录到数据库的配置 (一) 前段时间我一直想做一个通用一点的日志记录系统,可以便于不同的业务组调用进行日志记录及分析.本来打算着自己下手写一个,后面发现各业务组可能会需要 ...

  5. http请求报文格式(请求行、请求头、空行 和 请求包体)和响应报文格式(状态行、响应头部、空行 和 响应包体)

    转载 出处 超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议.HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求 ...

  6. 如何在虚拟机VM安装windows 2008R2

    1.首先确保已经安装好VM软件后进行以下操作.首先点击"文件"->再点击新建虚拟机.如图 2.点击新建虚拟机后会弹出如图所示,可以点击"典型",这里建议选 ...

  7. linux加大服务器文件描述符

    最简单的说,在 unix/liux 里面,你的服务只要开启一个进程,就要占用文件描述符的.liunx 默认 是 1024,如果描述符少了,你的访问量多了,你的服务器支撑不了,所以要把描述符加大. #e ...

  8. 一、VS支持Vue语法

    一.VS支持Vue语法

  9. UNIX网络编程总结四

    socket: 为了执行网络I/O,一个进程做的第一件事就是调用socket函数. family指明协议族,type指明类型,除非在原始套接口,protocol一般为0,并非所有的family,typ ...

  10. 动态规划—triangle

    题目: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjace ...