用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 ...
随机推荐
- Win10切换中英输入法问题
用此方法解决后的效果: Win10系统只剩下"美式键盘"和"搜狗拼音"两种输入法,且默认为美式键盘. 按Ctrl+Shift切换到搜狗拼音,输入完成后,再按Ct ...
- Linux下调试程序方法
您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语句,或者添加工具来分析程序.本文描述了几种可以用来调试在 Linux 上运行的程序的方法.我们将回顾四种调试问 ...
- SVN和CVS的区别
对版本控制就有了一定的理解,同时也应该知道SVN与CVS是比较流行的两款SCM工具.那么到底这两款工具有什么区别呢? 1.版本编号方面 例如,我们的版本库为A,其中有文件a,b,c. 在SVN中,新版 ...
- ORACLE存储过程创建失败,如何查看其原因
工作中用SQL Server比较多,Oracle可以说是小白,最近想用存储过程来完成单据复制的功能,结果遇到各种问题,其实都是非常简单的问题,但是对我来说还是花了很多时间来解决,浪费这些时间非常不值得 ...
- javascript面向对象(1)
主要内容: 在讲面向对象之前,我们先看一个示例: 类似这种情况大家都能够理解,但是,如果把代码改动一下,请再看一下: 为什么会这样? 如果把代码再改一下看看,如把变量改成b,则直接报错 JavaScr ...
- mysql 行变列(多行变成一行/多行合并成一行/多行合并成多列/合并行)
数据库结构如图: 而我想让同一个人的不同成绩变成此人在这一行不同列上显示出来,此时分为2中展现: 第一种展现如图----[多行变一列](合并后的数据在同一列上): sql如下: select name ...
- 【转】js判断手机访问网页
原理:原理有两个,第一:通过游览器(browser)判断是否是手机:第二:通过访问终端判断是否是手机(userAgent):但是通常考虑到兼容性,需要这两种原理同时使用:具体的实现如下: JS实现: ...
- delegate notification kvo三者比较
IOS 如何选择delegate.notification.KVO? 前面分别讲了delegate.notification和KVO的实现原理,以及实际使用步骤,我们心中不禁有个疑问,他们的功能比较类 ...
- MySQL操作类(本人自己写的)
package com.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepare ...
- 去重 ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字段) RN
关键字 ROW_NUMBER() OVER(PARTITION BY 分组字段 ORDER BY 排序字段) RN 按照分组字段进行排序并标编号 ROW_NUMBER() OVER(PARTITIO ...