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

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

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. Office 365部分安装及同时安装Visio的方法

    From MWeb Win版本的Office 365安装包默认安装所有组件,没有选择的页面,在安装Office 365后再安装下载的Visio 2016专业版时,会显示计算机上已经安装了即插即用Off ...

  2. 4.26-python学习笔记(变量及命名、字符串、格式化字符串print,format,%...)

    参考书目:<Learn Python The Hard Way> cars=100 print('there are ',cars,'cars available.') ##练习5 更多变 ...

  3. node从搭建运行项目整体流程

    1. 初始化配置基本信息: npm init (自定义配置) npm init -y (一切配置采用默认值) 在当前目录产生package.json文件,有一个dependencies用来记录该项目所 ...

  4. ubuntu下python在pycharm环境下安装setuptools和pip,和distutils.core

    python安装好后,我们用pycharm安装所需的第三方模块时,出现“Python packaging tools not found. install packaging tools”点击安装输完 ...

  5. 20155220 2016-2017-2《Java程序设计》课程总结

    20155220 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:师生关系 预备作业2:优秀技能经验 预备作业3:虚拟机linux初接触 第一周学习总结: ...

  6. 20155305 2016-2017-2 《Java程序设计》 实验五 Java网络编程及安全实验报告

    20155305 2016-2017-2 <Java程序设计> 实验五 Java网络编程及安全实验报告 实验内容 1.掌握Socket程序的编写. 2.掌握密码技术的使用. 3.设计安全传 ...

  7. VBox&vmware虚拟机安装Linux及Linux基础入门学习

    VBox&vmware虚拟机安装Linux及Linux基础入门学习 通过VMware workstation安装Linux 在安装虚拟机之前,我特意上网搜索了一下目前常使用的虚拟机软件,了解了 ...

  8. Kali linux 安装

    df -m umount  /media exit

  9. yaml中的锚点和引用

    项目引入yaml语言来写配置文件,最近发现利用其锚点&和引用*的功能,可以极大减少配置文件中的重复内容,将相同配置内容收敛到锚点处,修改时,只需要修改锚点处的内容,即可在所有引用处生效. ya ...

  10. HBase第一章 安装 HMaster 主备

    1.集群环境 Hadoop HA 集群规划 hadoop1 cluster1 nameNode  HMaster hadoop2 cluster1 nameNodeStandby ZooKeeper ...