目的:能够使用配置文件存储被测页面上元素的定位方式和定位表达式,做到定位数据和程序的分离。

测试程序写好以后,可以方便不具备编码能力的测试人员进行自定义修改和配置 ;

package dataDriverTest;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver; public class ObjectMap {
public WebDriver driver;
private Properties properties; public ObjectMap(String propFile) {
properties = new Properties();
try {
        
String   encoding="utf-8";   
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(propFile), encoding));
FileInputStream in = new FileInputStream(propFile); properties.load(in); in.close(); } catch (FileNotFoundException e) { System.out.println("没有找到 " + propFile + " 文件!无法读取!"); e.printStackTrace(); } catch (IOException e) { System.out.println("读取 " + propFile + "文件失败! "); e.getStackTrace(); } } /* * ElementNameInPropFile 从文件中获取对象的值; locatorType : 存储对象类型; * locatorValue:存储对象的值; */ public By getLocator(String ElementNameInPropFile) throws Exception { // 根据 变量 ElementNameInPropFile ,从属性配置文件中读取对应的配置对象; String locator = properties.getProperty(ElementNameInPropFile); /* * 将配置对象中的定位类型存储到 locatorType 中 ,将定位表达式的值存储到 locatorValue 中; */ System.out.println(locator); String locatorType = locator.split(":")[0]; String locatorValue = locator.split(":")[1]; System.out.println(locatorType + locatorValue); if (locatorType.toLowerCase().equals("id")) { return By.id(locatorValue); } else if (locator.toLowerCase().equals("name")) { return By.name(locatorValue); } else if (locator.toLowerCase().equals("classname") || locatorType.toLowerCase().equals("class")) { return By.className(locatorValue); } else if ((locatorType.toLowerCase().equals("tagname")) || (locatorType.toLowerCase().equals("tag"))) { return By.tagName(locatorValue); } else if ((locatorType.toLowerCase().equals("linktext")) || (locatorType.toLowerCase().equals("link"))) { return By.linkText(locatorValue); } else if (locatorType.toLowerCase().equals("partiallinktext")) { return By.partialLinkText(locatorValue); } else if ((locatorType.toLowerCase().equals("cssSelector")) || (locatorType.toLowerCase().equals("css"))) { return By.cssSelector(locatorValue); } else if (locatorType.toLowerCase().equals("xpath")) { return By.xpath(locatorValue); } else { throw new Exception("输入的locatorType " + locatorType + "未在程序中被定义!"); } } }

ObjectMap.properties存储的原素的表达式文件内容:

Sohumai.Homepage.username =id:username

Sohumai.Homepage.password =id:password

Sohumai.Homepage.submitbutton =id:submitbutton

测试代码:

package testNGPractice;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test; import cn.gloryroad.Log;
import dataDriverTest.ObjectMap;
import scr.comm.OpenBrowserInfo; public class TestObjectMap {
private ObjectMap objectmap;
public WebDriver driver;
private String url = "http://192.168.1.110:7001/CISS/";; @Test
public void test() throws Exception {
driver.navigate().to(url); try {
objectmap = new ObjectMap("D:\\objectmap.properties");
} catch (Exception e) {
e.printStackTrace(); }
WebElement username = driver.findElement(objectmap.getLocator("Sohumai.Homepage.username"));
WebElement password = driver.findElement(objectmap.getLocator("Sohumai.Homepage.password"));
WebElement submitbutton = driver.findElement(objectmap.getLocator("Sohumai.Homepage.submitbutton")); username.sendKeys("wlg3");
password.sendKeys("88888888");
submitbutton.click();
} @BeforeMethod
public void beforeMethod() {
OpenBrowserInfo.IeDriver();
driver = new InternetExplorerDriver();
} @AfterMethod
public void afterMethod() {
driver.close();
} }

测试public By getLocator(String ElementNameInPropFile) throws Exception {}方法:

package java_practice;

import dataDriverTest.ObjectMap;
import scr.comm.OpenBrowserInfo; public class T { public static void main(String[] args) {
// String pfile1="D:\\softerWare\\selenium\\eclipse_workspace\\objectmap.properties";
String pfile2="C:\\Users\\ty\\Documents\\Tencent Files\\316567803\\FileRecv\\objectMap.properties";
//String pfile = "D:\\objectmap.properties";
String uname = "ciss.username";
String pwd = "ciss.password";
String a="boc.public.searchBtn";
String b="boc.public.searchBox";
OpenBrowserInfo.Log4jInitialize();
ObjectMap obj = new ObjectMap(pfile2);
System.out.println("---------------");
try {
obj.getLocator(a);
obj.getLocator(b);
obj.getLocator(pwd);
obj.getLocator(uname); System.out.println("---------------"); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }

对象库(UI MAP)的更多相关文章

  1. UI对象库-定位元素与程序分离

    1.前言 这几天有人问我,UI自动化测试中使用到的页面定位元素应该存放在哪里比较合适?我想说的是如果你使用的是PO设计模式设计测试用例的话,可以把定位元素存在每一个page页面,一个page存放对应的 ...

  2. Selenium WebDriver UI对象库

    UI对象库:使用配置文件存储测试页面上的定位和定位表达式,做到定位数据和程序的分离. 第一步:实现工具类Object工具类,供测试程序调用. /** * 使用配置文件存储测试页面上的定位和定位表达式, ...

  3. 读取ini配置文件 及 UI对象库

    读取ini配置文件 配置项 读取API 写入API 实战:UI 对象库 读取ini配置文件 配置项 在每个 ini 配置文件中,配置数据会被分组(比如下述配置文件中的"config" ...

  4. Map.putAll方法——追加另一个Map对象到当前Map集合(转)

    该方法用来追加另一个Map对象到当前Map集合对象,它会把另一个Map集合对象中的所有内容添加到当前Map集合对象. 语法  putAll(Map<? extends K,? extends V ...

  5. QTP自传之对象库编程

    对象库编程是我们平时工作中使用最多的编程方式,在自动化脚本开发中起到举足轻重的作用,与描述性性编程相比,更直接和易于维护,今天就和大家简单的聊聊如何进行对象库编程. 既然是对象库编程,肯定要对已存在于 ...

  6. 将Object对象转换成Map 属性名和值的形式

    将Java对象转换成Map的键值对形式 代码: package cn.lonelcoud.util; import com.sun.deploy.util.StringUtils; import ja ...

  7. Java对象转换成Map

    需求总是千奇百怪,对象转成map,看似没必要,但就是有这个需求,所以记录下来 首先是Bean package tools; import lombok.Data; /** * 车辆实体类 */ @Da ...

  8. Map.putAll方法——追加另一个Map对象到当前Map集合

    转: Map.putAll方法——追加另一个Map对象到当前Map集合(转) 该方法用来追加另一个Map对象到当前Map集合对象,它会把另一个Map集合对象中的所有内容添加到当前Map集合对象. 语法 ...

  9. QTP 学习 - 对象库

    QTP的关键字视图和专家视图 1.Keyword view(关键字视图) 在录制脚本的过程中,用户执行的每一个步骤,在关键字视图中记录为一行. 关键字视图直观有效,用户可以很清楚的看到被录制对象的录制 ...

  10. VB6 对象库未注册问题

    以下是个人使用VB6出现对象库未注册问题的解决方法.已成功! 一.注册ocx文件 mscomctl.ocx文件放进路径C:\Windows\System32(64是此路径,由于本人是64位系统32位未 ...

随机推荐

  1. Python学习:13.Python正则表达式

    一.正则表达式简介 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. 就其本质 ...

  2. 轻松解决U盘加密问题

    很多小伙伴常常会遇到这样的问题,比如说有朋友或者同事想借用你的u盘,处于人情世故你又不得不借,但是又不喜欢自己的文件被别人看到或者担心丢失或被修改,在此提供一种给u盘加密或者给u盘里的文件加密的方法. ...

  3. scala (5) 可变序列和不可变序列

    /** * 序列分为可变长和不可变长,序列其实就是list,底层是链表结构 * 特点:插入有序,可重复,增加和移除元素很快,查询慢 * 不可变长序列:List * 可变长序列:ListBuffer * ...

  4. 关于 idea 快捷键 alt + f7 无法使用的一些尝试

    1. 概述 问题 使用 idea 时, 快捷键 alt + f7 无法生效 环境 OS: win10 idea: idea 2018.1.5 GeForce Experience: 3.17.0.12 ...

  5. PHP base64转换成图片

    获取base64文件 $image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASIAAAEiCAYAAABdvt+2AAAgAElEQV ...

  6. 优步uber司机申请了为什么一直没有通过审核,帐号也显示未激活

    优步uber现在是越来越火,申请注册成为优步uber司机的人数也日剧增多,申请了的车主都知道,申请后要等待审核,审核通过才可以激活帐号,快的运气好的,三五天不到一个星期就激活了,慢点的得大半个月,还有 ...

  7. Qt QStringLiteral

    zz 解释QStringLiteral 原文发表于woboq网站  QStringLiteral explained 转载 原作者: Olivier Goffart 译者:zzjin QStringL ...

  8. 【LG4587】[FJOI2016]神秘数

    [LG4587][FJOI2016]神秘数 题面 洛谷 题解 首先我们想一想暴力怎么做 对于一段区间\([l,r]\) 我们先将它之间的数升序排序 从左往右扫, 设当前我们可以表示出的数为\([1,x ...

  9. equals和==方法比较(三)--Long中LongCache源码分析

    下面我们来分析,上篇博客中遗留的问题,为什么下方的两个一个是true,两一个是false那? //true Long l1=123l; Long l2=123l; System.out.println ...

  10. Mongodb大数据语法大全

    JSON和MONGODBJSON不止是一种交换数据的方式,也是一种存储数据的良好方式,实际上MONGODB并未使用JSON存储数据,而是使用由MONGODB团队开发的一种称为BSON的开放数据格式. ...