首页 > 其他分享 >Selenium63-yaml文件

Selenium63-yaml文件

时间:2022-12-31 14:44:09浏览次数:49  
标签:文件 name 赛区 self list1 yaml Selenium63 page def

提升维护性策略

  • 定位和操作都在page层,不方便维护
  • 方案:把定位从page层分离到element层。
  • 使用yaml作为element层描述元素定位条件的文件格式。

YAML格式

  • YAML(/ˈjæməl/)YAML 是一种简洁的非标记语言。
    • 它是一个可读性高,用来表达数据序列化的格式。
  • YAML优势:
    • 以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。
  • YAML对象:
    • 键值对使用冒号结构表示key: value,冒号后面要加一个空格。

分离元素定位

  • 从页面对象中分离元素定位
  • 新建element文件夹:后台_登录.yaml
    用户名: "iduserName"
    密码: "id
    password"
    登录: "xpath==//span[text()='登录']"

改造pathmanager

  • 补充element元素定位条件的目录
class PathManager:
    # 项目目录
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    # 测试数据目录
    DATA_PATH = os.path.join(BASE_DIR, 'testdata')
    # 元素定位目录
    ELEMENT_PATH=os.path.join(BASE_DIR, 'element')

准备解析yaml文件的工具

  • 安装python的第三方插件yaml
    • pip install yaml
  • common包:readelement.py
import os
import yaml
from common.pathmanager import pm
class Element(object):
    def __init__(self, name):
        """获取元素"""
        self.file_name = '%s.yaml' % name
        self.element_path = os.path.join(pm.ELEMENT_PATH, self.file_name)
        if not os.path.exists(self.element_path):
            raise FileNotFoundError("%s 文件不存在!" % self.element_path)
        with open(self.element_path, encoding='utf-8') as f:
            self.data = yaml.safe_load(f)
    def __getitem__(self, item):
        """获取属性"""
        data = self.data.get(item)
        if data:
            name, value = data.split('==')
            return name, value
        raise ArithmeticError("{}中不存在关键字:{}".format(self.file_name, item))

第二版登录页

  • page包:后台_登录_page_v2.py
from pagebase.webpage import WebPage
from common.readelement import Element
e=Element('后台_登录')
……
    def login(self,un,pw):#登录
        self.input_text(e['用户名'],un)
        self.input_text(e['密码'],pw)
        self.click(e['登录'])

参考登录页,优化后台主页

  • 新建element下:后台_主页.yaml
  • 优化page里:后台_主页_page_v2.py

赛区管理页元素定位

  • element:后台_双创_基础设置_赛区管理.yaml
    赛区名称: "id_easyui_textbox_input1"
    查询: "xpath
    //span[text()='查询']"
    目标赛区名称: "xpath//td[@field='name']/div[text()='DIVISION_NAME']"
    目标删除: "xpath
    //td[div='DIVISION_NAME']/../td[@field='view']/div/a[2]"
    确定: "xpath//span[text()='确定']"
    添加赛区: "xpath
    //span[text()='添加赛区']"
    加载中: "idLoading"
    添加赛区frame: "id
    frmDlg"
    成功提示: "xpath//div[text()='赛区信息保存成功']"
    失败提示: "xpath
    //td[text()='MESSAGE']"

第二版赛区管理页

  • 后台_双创_基础设置_赛区管理_page_v2.py
from pagebase.webpage import WebPage
from common.readelement import Element
e=Element('后台_双创_基础设置_赛区管理')

class BgDivisionManagerPage(WebPage):
    def search(self,division_name):#用赛区名称查询
        self.input_text(e['赛区名称'],division_name)
        self.click(e['查询'])
    def is_division_exist(self,division_name):#判断查询结果里是否存在等于目标赛区名称的记录
        list1=list(e['目标赛区名称'])
        list1[1]=list1[1].replace('DIVISION_NAME',division_name)
        return self.is_element_present(tuple(list1))
    def delete_and_confirm(self,division_name):#删除后确定
        list1=list(e['目标删除'])
        list1[1]=list1[1].replace('DIVISION_NAME',division_name)
        self.click(tuple(list1))
        self.click(e['确定'])
    def to_add_division(self):#添加赛区
        self.click(e['添加赛区'])

    def wait_for_loaded(self):#等待加载完毕
        self.wait_for_disappear(e['加载中'])

    def switch_to_add_page(self):#切换到添加赛区子网页
        self.switch_frame(e['添加赛区frame'])
    def is_message_exist(self,message):#判断信息是否存在
        list1=list(e['失败提示'])
        list1[1]=list1[1].replace('MESSAGE',message)
        msg_loc=e['成功提示'] if message == "赛区信息保存成功" else tuple(list1)
        return self.is_element_present(msg_loc)
    def wait_message_dispear(self,message):#等待信息消失
        list1=list(e['失败提示'])
        list1[1]=list1[1].replace('MESSAGE',message)
        msg_loc=e['成功提示'] if message == "赛区信息保存成功" else tuple(list1)
        self.wait_for_disappear(msg_loc)

添加赛区元素定位

  • element:后台_双创_基础设置_添加赛区.yaml
    赛区名称: "id_easyui_textbox_input1"
    提交: "id
    pButton_ctlSave"
    取消: "idpButton_ctlCancel"
    加载中: "id
    Loading"
    浮动提示: "class name==tooltip"

第二版添加赛区页

from pagebase.webpage import WebPage
from common.readelement import Element
e=Element('后台_双创_基础设置_添加赛区')


class BgAddDivisionPage(WebPage):
    def input_division_name(self,division_name):#输入赛区名称
        self.input_text(e['赛区名称'],division_name)
    def submit(self):#提交
        self.click(e['提交'])

    def cancel(self):#取消
        self.click(e['取消'])

    def wait_for_loaded(self):#等待加载完毕
        self.wait_for_disappear(e['加载中'])
    def get_tooltip(self):#获得浮动提示
        self.move_to_element(e['赛区名称'])
        tooltip = self.get_text(e['浮动提示'])
        return tooltip

使用第二版页面对象

  • 导入第二版网页对象使用:test_后台_双创_基础设置_赛区管理_添加赛区_case_v7.py、所有conftest.py
from page.后台_登录_page_v2 import BgLoginPage
from page.后台_主页_page_v2 import BgHomePage
from page.后台_双创_基础设置_添加赛区_page_v2 import BgAddDivisionPage
from page.后台_双创_基础设置_赛区管理_page_v2 import BgDivisionManagerPage

运行调试测试用例

  • 运行,查看结果
    ========== test session starts ===============
    platform win32 -- Python 3.9.5, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
    sensitiveurl: .*
    rootdir: D:\PycharmProjects\aiseProject2\testcasecode
    collected 10 items
    test_后台_双创_基础设置_赛区管理_添加赛区_case_v7.py ..........
    ===========10 passed in 637.53s (0:10:37) ===========
    Process finished with exit code 0

标签:文件,name,赛区,self,list1,yaml,Selenium63,page,def
From: https://www.cnblogs.com/sean-test/p/17016641.html

相关文章

  • docker 日志文件大小配置
    在daemon.json设置max-size=500m,意味着一个容器日志大小上限是500M,max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。{"registry-mirr......
  • Selenium60-使用csv文件
    为什么要使用csv文件格式问题:参数化的测试数据存在于py文件里,不利于维护。方案:利用外部文件存储测试数据。文件格式选择csv的原因:csv格式较为通用、简单、方......
  • Linux下gcc命令运行c程序以及makefile文件
    GCC原名为GNUC语言编译器(GNUCCompiler),因为它原本只能处理C语言。GCC很快地扩展,变得可处理C++。后来又扩展为能够支持更多编程语言,如Fortran、Pascal、Objective-C......
  • selenium Remote模式下无法上传文件
    前言当selenium升级到4.7后使用远程调用服务,无法上传文件。driver=webdriver.Remote("http://127.0.0.1:9515",options=get_chrome_options())使用本地浏览器启动时......
  • 文件系统设计与实现
    文章目录​​文件系统的设计和实现​​​​背景知识​​​​实验设计相关的定义​​​​文件管理数据结构设计​​​​基本思路​​​​实验目标​​​​物理磁盘设计​​​......
  • SAP UI5 加载本地并不存在的 PDF 文件的错误处理
    ​​SAPUI5加载本地并不存在的PDF文件的错误处理​​ 这个​​_onLoadListener​​函数什么时候注册的呢?iframe完成加载之后,就触发这个load事件注册的处理......
  • 如何使用 SAP OData 服务向 ABAP 服务器上传文件试读版
    ​​如何使用SAPOData服务向ABAP服务器上传文件试读版​​ 本教程到目前为止开发的OData图书管理服务,可以在ABAP系统里对图书数据进行增删改查。本步骤我们......
  • python创建config.xml文件,调用Jenkins API接口创建带参数的Job
    文章目录​​一、要求​​​​二、pipeline模板xml的内容可以通过如下方式获取​​​​三、代码​​​​四、效果​​​​五、参考文章​​一、要求将hudson.model.StringPa......
  • meson配置文件开启静态链接|mingw编译开启静态链接
    在用mingw交叉编译TPT时查看wiki上的编译教程时发现编译出来的文件有dll依赖问题于是在它的win配置文件添加:[built-inoptions]c_args=['-O2','-mwindows']c_link_a......
  • 虚拟机磁盘瘦身(虚拟机内删除文件后,所占物理空间不变小)
     转发:https://blog.csdn.net/weixin_42741271/article/details/97256803之前由于课程需要,在虚拟机里重新编译了一个版本的内核,大小有十几个G吧。由于自己当时买电脑贪便......