selenium2 用Yaml文件进行元素管理 (五)
比如界面有一个按钮,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
aaarticlea/png;base64,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" alt="" />
解析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();
}
}
selenium2 用Yaml文件进行元素管理 (五)的更多相关文章
- selenium2入门 用Yaml文件进行元素管理 (五)
比如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要去创建test对象.如果id号变了,我们也只需要改一下test的名称就行了. 使用Yaml需要用 ...
- 用Yaml文件进行元素管理【转】
原文:http://www.cnblogs.com/milanmi/p/4636503.html 如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要 ...
- (五)Linux之文件与目录管理以及文本处理
Linux之文件与目录管理 目录 Linux之文件与目录管理 前言 绝对路径与相对路径说明: 一.目录常用命令 常用处理目录的命令: 切换目录 cd 显示当前路径 pwd 查看目录下文件 ls 创建目 ...
- python_selenium 之yaml文件读取(以读取元素信息为例)
一.yaml源文件编写 二.对yaml文件内容的读取 #coding=gbkimport osimport yamlcurrent_path=os.path.dirname(__file__)yaml ...
- YAML文件简介
编程免不了要写配置文件,怎么写配置也是一门学问. YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. 本文介绍 YAML 的语法,以 JS-YAML 的实现为例.你可以去 ...
- Kubernetes之YAML文件
一.YAML 基础 YAML是专门用来写配置文件的语言,非常简洁和强大,使用比json更方便.它实质上是一种通用的数据串行化格式.后文会说明定义YAML文件创建Pod和创建Deployment. YA ...
- Python基础笔记1-Python读写yaml文件(使用PyYAML库)
最近在搭建自动化测试项目过程中经常遇到yaml文件的读写,为了方便后续使用,决定记下笔记. 一,YAML 简介 YAML,Yet Another Markup Language的简写,通常用来编写项目 ...
- 入门Kubernetes - YAML文件
前言 前篇文章中简单了解到如何把.Net Core 程序部署到k8s中,过程中使用了多个*.yaml文件,那么这些文件的格式及含义.语法是如何的呢? 接下来,进一步了解学习 一.YAML介绍: 1.简 ...
- 6.K8s集群升级、etcd备份和恢复、资源对象及其yaml文件使用总结、常用维护命令
1.K8s集群升级 集群升级有一定的风险,需充分测试验证后实施 集群升级需要停止服务,可以采用逐个节点滚动升级的方式 1.1 准备新版本二进制文件 查看现在的版本 root@k8-master1:~# ...
随机推荐
- 几个Unity3d UI制作的解决方案.
1.ex2D的渲染机制 (高效的原因) 在以往的2D插件中,渲染方式是每个sprite单独渲染,由Unity负责Dynamic Batching.在新版ex2D中,我们经过严谨的优化实现了独立的dyn ...
- Mybatis与Hibernate的详细对比
前言 这篇博文我们重点分析一下Mybatis与hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Mybatis简 ...
- UI多线程调用:线程间操作无效: 从不是创建控件"Form1"的线程访问它.
有两种方式解决 1.在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false;2.使用Invoke等委托函数. 问题原因是.net2.0以后拒绝多 ...
- matlab中freqz的用法以及多项式的展开
对于一个变量a,matlab中定义需要这样 syms a: 定义之后就可以写由变量组成的式子,比如 c=(1+a^-1)^5; 可以用expand(c) 就能把c展开成多项式,每一项的系数就可以看到. ...
- ACM学习历程—HihoCoder1309任务分配(排序 && 贪心)
http://hihocoder.com/problemset/problem/1309 题目大意是给定n个任务的起始时间,求问最少需要多少台机器. 有一个贪心的策略就是,如果说对于一个任务结束,必然 ...
- Spring按名称自动装配--byName
在Spring中,“按名称自动装配”是指,如果一个bean的名称与其他bean属性的名称是一样的,那么将自动装配它. 例如,如果“customer” bean公开一个“address”属性,Sprin ...
- ASP.NET 2.0缓存
MSDN上缓存概述: http://msdn2.microsoft.com/zh-cn/library/726btaeh(VS.80).aspx 一.页输出缓存 1.设置 ASP.NET 页缓存的两种 ...
- python使用wxPython创建一个简单的文本编辑器。
ubuntu下通过'sudo apt-get install python-wxtools'下载wxPython.load和save函数用于加载和保存文件内容,button通过Bind函数绑定这两个函 ...
- mongo数据排序和分页显示
数据排序 使用sort()1 升序-1 降序自然排序 数据插入的顺序$natural db.stu.drop(); db.stu.insert({,,"address":" ...
- shell中的输入输出和编程中的变量(shell 03)
shell中的输入输出标准输入:键盘标准输出:终端显示器>> 追加是换行追加的echo -n 不尾随换行符 -e 启用解释反斜杠的转义功能 -E 禁用解释反斜杠的转义功能(默认) --he ...