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,
)
 

最新文章

  1. 最快让你上手ReactiveCocoa之基础篇
  2. oracle中时间运算
  3. Java-认识字符集-转载
  4. Linux学习之二——档案与目录的属性和权限
  5. 【转】mysql字符串函数
  6. SexyProgressBar
  7. tomcat安装与配置文件
  8. 【转】EditText获取焦点不自动弹出键盘设置--失去焦点的方法,不错
  9. ASP.NET之Application、Session和Cookie的差别
  10. Cocos2d-3x:vs2012项目开关android项目需要注意的地方
  11. Nginx “邪恶” rewrite
  12. [2014-08-18]初尝 AspNet vNext On Mac
  13. 巧用Mono.Cecil反射加载类型和方法信息
  14. C# 使用Parallel并行开发Parallel.For、Parallel.Foreach实例
  15. 【JavaScript的五种基本数据类型及转换】
  16. 原生JS封装 toast 弹层,自动关闭
  17. C语言闰年问题程序框图
  18. mysql使用存储过程和event定期删除
  19. STM32F103X datasheet学习笔记---USART
  20. CentOS6.5使用yum快速搭建LAMP环境

热门文章

  1. [Web 前端] 008 css 颜色表示方法
  2. Sentinel整合Dubbo限流实战(分布式限流)
  3. java变量的类型
  4. [CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)]飞行棋
  5. BigDecimal 的用法
  6. 读取FTP上的excel文件,并写入数据库
  7. 基于socket实现大文件上传
  8. 06.Linux-RedHat系统本地yum源配置
  9. python常用函数 V
  10. keras 下载预训练模型报错SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)