什么是对象存储库?
对象存储库是所有对象的公共存储位置。在Selenium WebDriver上下文中,对象通常是用于唯一标识Web元素的定位器。
使用对象存储库的主要优点是将对象从测试用例中分离出来。如果一个Webelement的定位器值发生变化,只需对象存储库维护对象存储库就可以增加框架实现的模块性。
在本教程中,将了解-
- 什么是对象存储库?
- Selenium Web Driver中的对象存储库类型
- 使用属性文件的Selenium Web驱动程序对象存储库
- 使用XML文件的Selenium WebDriver对象存储库
Selenium Web Driver中的对象存储库类型
默认情况下,Selenium WebDriver不提供内置的对象存储库。然而,可以使用键-值对方法来构建对象储存库,其中键是指给予对象的名称,值是指用于唯一标识网页内的对象的属性。
以下是可以在Selenium WebDriver中创建的对象存储库的类型。
- 使用属性文件的对象存储库
- 使用XML文件的对象存储库
使用属性文件的Selenium Web驱动程序对象存储库
在这种方法中,属性文件是文本文件,其中数据以键-值对的形式存储。下面的教程将介绍以下主题。
- 在eclipse中创建属性文件
- 将数据存储到属性文件
- 正在从属性文件读取数据
- 在测试脚本中使用属性文件
步骤1)在eclipse中创建属性文件
- 首先,需要在Eclipse中创建以下java项目结构。项目名称和包名称可以是任何有效名称。
- 右键单击主项目文件夹,然后选择新建->其他
- 在下一个窗口中,选择General->File(常规->文件)并单击‘Next’(下一步)按钮
- 在新文件资源窗口中提供扩展名为“.properties”的有效文件名,然后单击“Finish”按钮
- 名为“application ation.properties”的文件必须显示在项目结构上
步骤2)将数据存储到属性文件
- 数据以键-值对的形式存储在属性文件中,其中键在整个文件中是唯一的。
- 我们将尝试使用属性文件通过定位器值来标识Webelements。
- 在Eclipse中打开application ation.properties文件并存储以下数据
MobileTesting=//a[text()='MOBILE TESTING']
EmailTextBox = philadelphia-field-email
SignUpButton = philadelphia-field-submit
4)本教程使用以下演示网站:http://www.itxiaonv.com/test/guru99home/。以下是测试场景:
- 单击使用XPath的移动测试链接
- 向后导航
- 使用ID将数据输入电子邮件文本框
- 使用ID单击注册按钮
步骤3)从属性文件读取数据
- 可以使用java.util包中提供的内置Properties类从属性文件读取数据。
- 最初,需要创建Properties类的对象,如下所示
Properties obj = new Properties();
- 我们需要使用属性文件的路径创建FileInputStream类的对象
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir")+"\\application.properties");
- 从属性文件中读取数据可以使用Java中的Properties类提供的Load方法来完成。下面的代码演示了Load方法的用法。
Properties obj = new Properties();
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir")+"\\application.properties");
obj.load(objfile);
String mobileTesting = obj.getProperty("MobileTesting");
字符串‘mobileTesting’将包含XPath,以标识网页内的Mobile测试链接。
步骤4)在测试脚本中使用属性文件
通过从属性文件读取数据并将数据作为参数传递给findElement方法,可以在测试脚本中使用属性文件。下面的代码演示了如何在测试脚本中使用从属性文件读取的数据。
driver.findElement(By.xpath(obj.getProperty("MobileTesting"))).click();
driver.findElement(By.id(obj.getProperty("EmailTextBox"))).sendKeys("This email address is being protected from spambots. You need JavaScript enabled to view it.");
driver.findElement(By.id(obj.getProperty("SignUpButton"))).click();
下面是用于上述测试场景的完整代码。
package com.objectrepository.demo;
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.chrome.ChromeDriver;
public class DemoOR {
public static void main(String[] args) throws IOException {
// Create WebDriver Instance
WebDriver driver;
System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
driver = new ChromeDriver();
driver.get("http://www.itxiaonv.com/test/guru99home/");
driver.manage().window().maximize();
// Load the properties File
Properties obj = new Properties();
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir")+"\\application.properties");
obj.load(objfile);
// Nagigate to link Mobile Testing and Back
driver.findElement(By.xpath(obj.getProperty("MobileTesting"))).click();
driver.navigate().back();
// Enter Data into Form
driver.findElement(By.id(obj.getProperty("EmailTextBox"))).sendKeys("This email address is being protected from spambots. You need JavaScript enabled to view it.");
driver.findElement(By.id(obj.getProperty("SignUpButton"))).click();
}
}
使用XML文件的Selenium WebDriver对象存储库
XML代表可扩展标记语言(Extensible Markup Language)。XML文件使用文档下面是将涵盖的主题列表。
- 在Eclipse中创建XML文件
- 将数据存储到XML文件
- 从XML文件读取数据
- 在测试脚本中使用XML文件
步骤1)在Eclipse中创建XML文件
- 下面的java项目结构需要在Eclipse中创建。
- 右键单击项目文件夹,选择新建->其他
- 选择XML文件夹中的XML文件,然后单击“下一步”按钮
- 输入有效的XML文件名,然后单击“Finish”按钮
- 将向项目文件夹添加一个XML文件,如下所示
步骤2)将数据存储到XML文件中
数据可以以文档对象模型(DOM)的形式存储在XML文件中。为简单起见,我们可以使用下面的测试场景作为示例。
- 单击使用XPath的移动测试链接
- 导航回主页
- 使用ID将数据输入电子邮件文本框
- 使用ID单击注册按钮
下面是要使用的XML文件的格式。
<menu>
<mobiletesting>//a[text()='MOBILE TESTING']</mobiletesting>
<email> philadelphia-field-email</email>
<signup> philadelphia-field-submit </signup>
</menu>
将上述XML代码存储在Properties.xml中
在设计选项卡中,将看到
步骤3)从XML文件读取数据
1. 从XML文件中读取数据可以使用Java中内置的“dom4j”类来完成。注意,在继续执行代码之前,需要将以下JAR文件添加到项目的构建路径中。
- jaxen.jar
- dom4j-1.6.jar
2. 下面是从XML文件中读取数据的代码。
File inputFile = new File(System.getProperty("user.dir") +"\\properties.xml");
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(inputFile);
String mobileTesting = document.selectSingleNode("//menu/mobiletesting").getText();
String emailTextBox = document.selectSingleNode("//menu/email").getText();
String signUpButton = document.selectSingleNode("//menu/signup").getText();
3. 最初,我们需要创建一个File对象,并将其作为参数传递给SAXReader类的“read”方法。一旦成功读取了XML文件数据,我们就可以使用‘selectSingleNode’方法访问XML文档的各个节点。
步骤4)在测试脚本中使用XML文件
通过从XML文件读取数据并将数据作为参数传递给findElement方法,可以在测试脚本中使用XML文件。下面的代码演示了如何在测试脚本中使用从XML文件读取的数据。
driver.findElement(By.xpath(mobileTesting)).click();
driver.findElement(By.id(emailTextBox)).sendKeys("This email address is being protected from spambots. You need JavaScript enabled to view it.");
driver.findElement(By.id(signUpButton)).click();
下面的代码演示了在Selenium WebDriver中使用XML文件
package com.objectrepository.demo;
import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class DemoORXML {
public static void main(String[] args) throws DocumentException {
// Creating WebDriver Instance
WebDriver driver;
System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
driver = new ChromeDriver();
driver.get("http://www.itxiaonv.com/test/guru99home/");
driver.manage().window().maximize();
// Reading XML File
File inputFile = new File(System.getProperty("user.dir") +"\\properties.xml");
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(inputFile);
String mobileTesting = document.selectSingleNode("//menu/mobiletesting").getText();
String emailTextBox = document.selectSingleNode("//menu/email").getText();
String signUpButton = document.selectSingleNode("//menu/signup").getText();
//Navigating to Mobile Testing and back
driver.findElement(By.xpath(mobileTesting)).click();
driver.navigate().back();
//Entering Form Data
driver.findElement(By.id(emailTextBox)).sendKeys("This email address is being protected from spambots. You need JavaScript enabled to view it.");
driver.findElement(By.id(signUpButton)).click();
}
}
下载WebDriver Eclipse项目
总结:
- 对象存储库是所有对象的公共存储位置
- 默认情况下,Selenium WebDriver不提供内置对象存储库
-
可以在Selenium中创建两种类型的对象存储库
- 使用属性文件的对象存储库
- 使用XML文件的对象存储库
- 属性文件是文本文件,其中数据以键-值对的形式存储
- XML文件格式将复制构建网页所基于的HTML格式。