用Yaml文件进行元素管理【转】
原文:http://www.cnblogs.com/milanmi/p/4636503.html
如界面有一个按钮,id号是test。如果进行对象化的话,就是test.click就可以了。不用每次都要去创建test对象。如果id号变了,我们也只需要改一下test的名称就行了。
使用Yaml需要用到下载jyaml的jar包。下载地址是http://www.java2s.com/Code/Jar/j/Downloadjyaml13jar.htm
TestBaidu.yaml

baidu_button: type:id value:su baidu_input: type:id value:kw

解析yaml类 YamlUtil.java

package com.test.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.HashMap; import java.util.Map; import org.ho.yaml.Yaml; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; public class YamlUtil { private String yamlfile; private WebDriver driver; private Map<String,Map<String,String>> ml; public YamlUtil(WebDriver driver,String yamlFilePath){ this.yamlfile =yamlFilePath; this.driver=driver; getYamlFile(); } public void getYamlFile(){ File f = new File(this.yamlfile); try { ml= Yaml.loadType(new FileInputStream(f.getAbsolutePath()), HashMap.class); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //创建by对象 private By getBy(String key){ By by = null; if (ml.containsKey(key)){ Map<String,String> m = ml.get(key); String type = m.get("type"); String value = m.get("value"); switch(type){ case "id": by = By.id(value); break; case "name": by = By.name(value); break; case "xpath": by = By.xpath(value); break; case "class": by = By.className(value); break; case "linkText": by = By.linkText(value); break; case "cssSelector": by= By.cssSelector(value); break; } } else { System.out.println("Locator "+key+" is not exist in "+yamlfile); } return by; } //根据名称 返回webElement对象 public WebElement getElement(String key){ By by = this.getBy(key); WebElement element = driver.findElement(by); return element; } }

调用:

package info.milan.webdriver; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.AfterClass; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.test.util.YamlUtil; import common.Assertion; public class day10 { public WebDriver Driver; public YamlUtil myYaml; //case,suit单元用例里面,存在多个case可以成为一个簇 //每个class执行之前调用 @BeforeClass public void Bclass(){ ///浏览器初始化 Driver = new FirefoxDriver(); Driver.manage().window().maximize(); //加载yaml文件 myYaml = new YamlUtil(Driver,"yamlFile/TestBaidu.yaml"); } //每个用例执行之前调用 @BeforeMethod public void setup(){ Driver.navigate().to("https://www.baidu.com"); } //每个用例执行完毕之后调用 @AfterMethod public void teardown(){ } //每个class执行之后调用 @AfterClass public void Aclass(){ ///浏览器关闭 Driver.close(); Driver.quit(); } //测试用例数据 @DataProvider(name="logOutDataPro") public Object[][]loginOutData(){ return new Object[][]{{"1"},{"很长很长的观坚持"},{"特殊字符+!@¥"}}; } //执行测试用例 @Test(dataProvider="logOutDataPro") public void baidu(String info){ //获取webElement WebElement baiduInput = myYaml.getElement("baidu_input"); baiduInput.clear(); baiduInput.sendKeys(info); WebElement baiduButton = myYaml.getElement("baidu_button"); baiduButton.click(); } }
用Yaml文件进行元素管理【转】的更多相关文章
- selenium2入门 用Yaml文件进行元素管理 (五)
比如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要去创建test对象.如果id号变了,我们也只需要改一下test的名称就行了. 使用Yaml需要用 ...
- selenium2 用Yaml文件进行元素管理 (五)
比如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要去创建test对象.如果id号变了,我们也只需要改一下test的名称就行了. 使用Yaml需要用 ...
- python_selenium 之yaml文件读取(以读取元素信息为例)
一.yaml源文件编写 二.对yaml文件内容的读取 #coding=gbkimport osimport yamlcurrent_path=os.path.dirname(__file__)yaml ...
- Kubernetes之YAML文件
一.YAML 基础 YAML是专门用来写配置文件的语言,非常简洁和强大,使用比json更方便.它实质上是一种通用的数据串行化格式.后文会说明定义YAML文件创建Pod和创建Deployment. YA ...
- 入门Kubernetes - YAML文件
前言 前篇文章中简单了解到如何把.Net Core 程序部署到k8s中,过程中使用了多个*.yaml文件,那么这些文件的格式及含义.语法是如何的呢? 接下来,进一步了解学习 一.YAML介绍: 1.简 ...
- 6.K8s集群升级、etcd备份和恢复、资源对象及其yaml文件使用总结、常用维护命令
1.K8s集群升级 集群升级有一定的风险,需充分测试验证后实施 集群升级需要停止服务,可以采用逐个节点滚动升级的方式 1.1 准备新版本二进制文件 查看现在的版本 root@k8-master1:~# ...
- k8s之yaml文件详解
k8s之yaml文件详解 目录 k8s之yaml文件详解 1. k8s支持的文件格式 2. YAML语言格式 3. 查看api资源版本标签 4. 编写nginx-test.yaml资源配置清单 4.1 ...
- 对XML和YAML文件实现I/O操作
1.文件的打开关闭 XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如: string filename = "I.xml"; FileStora ...
- [Kubernetes]yaml文件详解
应前一段时间夸下的海口:[Kubernetes]如何使用yaml文件使得可以向外暴露服务,说过要写一篇关于yaml文件详解的文章出来的,今天来总结一下.yaml文件用在很多地方,但是这里以介绍在Kub ...
随机推荐
- Android部分调试开关
开启 GPU Render 的profiling bar: adb shell setprop debug.hwui.profile visual_bars #或visual_lines adb sh ...
- Android WIFI 分析(二)
本文介绍Wifi 分析线路二:在Setting中打开WiFi功能.扫描网络以及连接网络的流程. WifiSettings 无线网络设置界面 WifiEnabler 相当于无线网络设置开关 WifiDi ...
- markdown基本操作
# 一级标题 ## 二级标题,以此类推 - 或者 * ...
- 解決 java.security.cert.CertificateException: Certificates does not conform to algorithm constraints
找到 jre/lib/security/java.security 将 jdk.certpath.disabledAlgorithms=MD2, DSA, RSA keySize < 2048 ...
- js+html+jquery 个人笔记
js+html+jquery 笔记 1.获取HTML对象 var obj = document.getElementById(elementId) 对象的值: obj.value() 2.获取jQue ...
- 记一次创建LVM的日志记录
先上一张鸟哥LVM的图.感觉这张最清楚了. #以下以Xshell的日志记录系统直接记录.上面添加了一些个人理解的注释 [BEGIN] 2016/9/13 9:22:24 #先查看下硬盘的情况. [ro ...
- Oracle归档模式和非归档模式
一 什么是Oracle归档模式? Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更新数据等,对这些操作都会记录在联机重做日志里.一般数据库至少要有2个联机重做日志 ...
- [08]APUE:进程控制
[a] getpid / getppid / getuid / geteuid / getgid / getegid #include <unistd.h> pid_t getpid(vo ...
- JS-Number
Number 是对原始数据的封装 语法: var myNum=new Number(value);//返回一个新创建的 Number 对象 var myNum=Number(value);//把自己的 ...
- 最小生成树算法——prim算法
prim算法:从某一点开始,去遍历相邻的边,然后将权值最短的边加入集合,同时将新加入边集中的新点遍历相邻的边更新边值集合(边值集合用来找出新的最小权值边),注意每次更新都需将cost数组中的点对应的权 ...