使用 Yaml 进行 selenium 的 po 设计
时间:2022-07-24
本文章向大家介绍使用 Yaml 进行 selenium 的 po 设计,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
使用Yaml
文件进行元素信息的管理
安装
Github地址:https://github.com/zx490336534/selenium-po
$ pip install selenium-po
使用方法
创建一份yaml
代码中使用的是name
后的内容,实际页面元素定位使用的value
中的内容,方便后续统一维护
pages:
- page:
pageName: index
desc: 首页
locators:
- {desc: "搜索栏",type: "id",value: "kw",timeout: 3, name: "index_input"}
- {desc: "查询按钮",type: "id",value: "su",timeout: 3, name: "index_search"}
- page:
pageName: news
desc: 新闻
locators:
- {desc: "搜索栏",type: "id",value: "ww",timeout: 3, name: "news_input"}
- {desc: "查询按钮",type: "id",value: "s_btn_wr",timeout: 3, name: "news_search"}
创建一个页面操作对象
import os
import time
from selenium_po.elementoperator import ElementOperator
path = os.path.dirname(os.path.abspath(__file__))
class BaiDuIndexAction(ElementOperator):
def __init__(self, path=f"{path}/pages.yaml", file_name='index', driver=None):
super(BaiDuIndexAction, self).__init__(path, file_name, driver)
self.url = 'http://www.baidu.com'
class BaiDuNewsAction(ElementOperator):
def __init__(self, path=f"{path}/pages.yaml", file_name='news', driver=None):
super(BaiDuNewsAction, self).__init__(path, file_name, driver)
self.url = 'http://news.baidu.com/'
测试
if __name__ == '__main__':
baidu = BaiDuIndexAction()
baidu.open(baidu.url, baidu.index_input)
baidu.input(baidu.index_input, "python")
baidu.click(baidu.index_search)
time.sleep(2)
baidu.screenshot_pic("1.png")
# baidu.close()
baidu_news = BaiDuNewsAction(driver=baidu.driver)
baidu_news.open(baidu_news.url, baidu_news.news_input)
baidu_news.input(baidu_news.news_input, "python新闻")
baidu_news.click(baidu_news.news_search)
time.sleep(2)
baidu_news.screenshot_pic("2.png")
baidu_news.close()
输出
往「首页_搜索栏」输入「python」
点击「首页_查询按钮」
往「新闻_搜索栏」输入「python新闻」
点击「新闻_查询按钮」
截图
测试截图
测试截图2
- 使用动态语言来制作silverlight
- 《资讯》霍金:人工智能的威胁就像核武器,世界将发生10大变化!
- [原创]WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿
- 厉害了,连美图CEO都开始热捧区块链了!
- Silverlight制作逐帧动画
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构
- 糟糕了!这次新版微信,要干死所有小游戏了!
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(59)-BLL层重构
- 除了奇奇怪怪的机器人们,2017年人工智能还干了哪些“蠢事”?
- 区块链搬砖的坑及有效鉴别方法
- 英伟达回应禁令:研究人员放心用不更新驱动就没影响
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(88)-Excel导入和导出-主从表结构导出
- WCF中的Binding模型之六(完结篇):从绑定元素认识系统预定义绑定
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(57)-插件---ueditor使用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 前端图片下载
- 使用JDBC连接MySQL数据库--典型案例分析(七)----批量插入员工信息
- NIO删除文件提示文件AccessDeniedException
- 使用JDBC连接MySQL数据库--典型案例分析(八)----实现员工数据的分页查询
- RocketMQ源码之路(一)搭建RocketMQ源码环境
- docker安装filebeat
- Java Jar源码反编译工具对比
- 深入理解JVM虚拟机---垃圾回收与内存分配
- rxjs pipe和filter组合的一个实际例子的单步调试
- SAP Spartacus基于travis的持续集成
- Angular里如何测试一个具有外部依赖的Component
- Angular Component的DOM单元测试
- 对具有依赖的Angular服务进行单元测试的几种方式
- 使用TestBed测试具有依赖关系的Angular服务
- 使用jasmine.createSpyObj测试具有依赖关系的Angular服务