zoukankan      html  css  js  c++  java
  • 测开之路六十六:UI测试平台之处理逻辑和蓝图添加到程序入口

    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,
    )
     
  • 相关阅读:
    JavaWeb网上商城项目中用户注册,使用MailServer和FoxMail搭建本地邮件服务器
    myeclipse编码问题
    Date日期类型的绑定
    springmvc学习之jdk版本,tomcat版本,spring版本
    mybatis-ehcache整合中出现的异常 ibatis处理器异常(executor.ExecutorException)解决方法
    .net里面<app.config>中value值不能填写特殊符号问题
    sqldeveloper中Excel数据的导入与导出
    IntelliJ IDEA 2019.2最新版本免费激活码(转)
    sqlserver 的一些小总结
    SQL 跨数据库同步数据 、跨数据库跨更新数据
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/11204109.html
Copyright © 2011-2022 走看看