原文: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文件进行元素管理【转】的更多相关文章

  1. selenium2入门 用Yaml文件进行元素管理 (五)

    比如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要去创建test对象.如果id号变了,我们也只需要改一下test的名称就行了. 使用Yaml需要用 ...

  2. selenium2 用Yaml文件进行元素管理 (五)

    比如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要去创建test对象.如果id号变了,我们也只需要改一下test的名称就行了. 使用Yaml需要用 ...

  3. python_selenium 之yaml文件读取(以读取元素信息为例)

    一.yaml源文件编写 二.对yaml文件内容的读取 #coding=gbkimport osimport yamlcurrent_path=os.path.dirname(__file__)yaml ...

  4. Kubernetes之YAML文件

    一.YAML 基础 YAML是专门用来写配置文件的语言,非常简洁和强大,使用比json更方便.它实质上是一种通用的数据串行化格式.后文会说明定义YAML文件创建Pod和创建Deployment. YA ...

  5. 入门Kubernetes - YAML文件

    前言 前篇文章中简单了解到如何把.Net Core 程序部署到k8s中,过程中使用了多个*.yaml文件,那么这些文件的格式及含义.语法是如何的呢? 接下来,进一步了解学习 一.YAML介绍: 1.简 ...

  6. 6.K8s集群升级、etcd备份和恢复、资源对象及其yaml文件使用总结、常用维护命令

    1.K8s集群升级 集群升级有一定的风险,需充分测试验证后实施 集群升级需要停止服务,可以采用逐个节点滚动升级的方式 1.1 准备新版本二进制文件 查看现在的版本 root@k8-master1:~# ...

  7. k8s之yaml文件详解

    k8s之yaml文件详解 目录 k8s之yaml文件详解 1. k8s支持的文件格式 2. YAML语言格式 3. 查看api资源版本标签 4. 编写nginx-test.yaml资源配置清单 4.1 ...

  8. 对XML和YAML文件实现I/O操作

    1.文件的打开关闭 XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如: string filename = "I.xml"; FileStora ...

  9. [Kubernetes]yaml文件详解

    应前一段时间夸下的海口:[Kubernetes]如何使用yaml文件使得可以向外暴露服务,说过要写一篇关于yaml文件详解的文章出来的,今天来总结一下.yaml文件用在很多地方,但是这里以介绍在Kub ...

随机推荐

  1. Android中Http加载如何得到Cookie和 WebView 加载网页如何得到的Cookie

    最近做项目在手机端登录Http请求和 WebView 记载登录获取Cookie信息,可查看Cookie信息. 如图: Http请求获取Cookie信息: public static String re ...

  2. 转发(forward)和重定向(sendRedirect)

    一. RequestDispatche 是一个Web资源的包装器,可以用来把当前的Request传递给该资源,或者把新的资源包括到当前的相应中.详细来说:RequestDispatch对象从客户端获取 ...

  3. Finereport集群配置

    增加配置文件cluster.xml 将配置包resource文件夹下的cluster.xml打开,如果没有cluster.xml,则新建一个,基本内容如下: <?xml version=&quo ...

  4. SQL Server中 ldf 文件过大的解决方法

    在SQL Server中经常遇到事务日志变大的情况,除了将数据库设置为"自动收缩"外,还可以使用下面的SQL命令进行快速清除数据库中的事务日志,命令如下:  - 第一步:清空日志  ...

  5. videoconverter转换

    以前录制的avi用vfw可以解码的,但是现在变成win7系统了,无法解码了.只好用视频转换软件把avi转成无压缩的. 选择losses uncompressed avi,点进去选UYVY就行了.

  6. 【随笔】Photoshop简单切图

    一.首先准备一张需要切割的图: 二.打开Photoshop,在ps里打开这张图片: 三.在界面的左边选择切片工具: 四.根据需要,鼠标点住上方和左边的标尺拖动,给图片加上分割辅助线: 五.用切片工具点 ...

  7. makfile

    1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之 ...

  8. Linux内核【链表】整理笔记(1)

    我们都知道Linux内核里的双向链表和学校里教给我们的那种数据结构还是些不一样.Linux采用了一种更通用的设计,将链表以及其相关操作函数从数据本身进行剥离,这样我们在使用链表的时候就不用自己去实现诸 ...

  9. DIV+CSS常用的网页布局代码

    单行一列以下是引用片段:body { margin: 0px; padding: 0px; text-align: center; }#content { margin-left:auto; marg ...

  10. 强大的Spring缓存技术(上)

    缓存是实际工作中非常常用的一种提高性能的方法, 我们会在许多场景下来使用缓存. 本文通过一个简单的例子进行展开,通过对比我们原来的自定义缓存和 spring 的基于注释的 cache 配置方法,展现了 ...