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

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

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. XAMPP之Mysql启动失败

    启动XAMPP中的Mysql出现如下: 可能的原因是本地有多个MySQL,所以要在注册表编辑器中将imagePath改成XAMPP中的mysql的地址.(打开注册表编辑器:win+R,输入regedi ...

  2. pyasn1 安装异常

    初探Scrapy 时,也不知道按照哪里的文档装的,由于安装低版本的pyasn1 后,使用pip uninstall 都 卸不了 步骤如下: 异常: pyasn1-modules has require ...

  3. 20155236 2016-2017-2 《Java程序设计》第三周学习总结

    20155236 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 1.在原始码中只能有一个公开类,且主文档名必须与公开类名称相同:其实只要有一个类定义,就会产 ...

  4. 20155307 2016-2017-2 《Java程序设计》第4周学习总结

    20155307 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 所谓继承,讲的就是出现很多很多相同的部分的话,就把这个部分变成"父类", ...

  5. 20155321 《Java程序设计》实验五 网络编程与安全

    实验内容 两人一组结对编程: 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 结对实现中缀表达式转后缀表达式的功能 MyBC.java 结对 ...

  6. 《Java 程序设计》课堂实践一

    由于我的IDEA在课堂上临时崩坏导致当时无法编程,修了很长一段时间解决了诸多问题才修好 现将三个题目解答如下 一.MySort 模拟实现Linux下Sort -t : -k 2的功能.参考 Sort的 ...

  7. 2017-2018-1 20155327 《信息安全系统设计基础》课堂测试&课下作业

    2017-2018-1 20155327 <信息安全系统设计基础>课堂测试&课下作业 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k ,grep ...

  8. 【BZOJ2754】[SCOI2012]喵星球上的点名

    [BZOJ2754][SCOI2012]喵星球上的点名 题面 bzoj 洛谷 题解 这题有各种神仙做法啊,什么暴力\(AC\)自动机.\(SAM\)等等五花八门 我这个蒟蒻在这里提供一种复杂度正确且常 ...

  9. 2018.10.17校内模拟赛:T2神光

    题面:pdf 首先排序,二分,然后怎么判定是否可行. 最简单的思路是,dp[i][j][k],到第i个,用了j次红光,k次绿光,前i个点都选上了,是否可行.然后转移就行. 然后考试的时候就想到这了,往 ...

  10. CF 1065 E. Side Transmutations

    E. Side Transmutations http://codeforces.com/contest/1065/problem/E 题意: 长度为n的字符串,字符集为A,问多少不同的字符串.两个字 ...