在Selenium WebDriver中创建对象存储库:XML和属性文件

什么是对象存储库?

对象存储库是所有对象的公共存储位置。在Selenium WebDriver上下文中,对象通常是用于唯一标识Web元素的定位器。

使用对象存储库的主要优点是将对象从测试用例中分离出来。如果一个Webelement的定位器值发生变化,只需对象存储库维护对象存储库就可以增加框架实现的模块性。

在本教程中,将了解-

  • 什么是对象存储库?
  • Selenium Web Driver中的对象存储库类型
  • 使用属性文件的Selenium Web驱动程序对象存储库
  • 使用XML文件的Selenium WebDriver对象存储库

Selenium Web Driver中的对象存储库类型

默认情况下,Selenium WebDriver不提供内置的对象存储库。然而,可以使用键-值对方法来构建对象储存库,其中键是指给予对象的名称,值是指用于唯一标识网页内的对象的属性。

以下是可以在Selenium WebDriver中创建的对象存储库的类型。

  1. 使用属性文件的对象存储库
  2. 使用XML文件的对象存储库

使用属性文件的Selenium Web驱动程序对象存储库

在这种方法中,属性文件是文本文件,其中数据以键-值对的形式存储。下面的教程将介绍以下主题。

  • 在eclipse中创建属性文件
  • 将数据存储到属性文件
  • 正在从属性文件读取数据
  • 在测试脚本中使用属性文件

步骤1)在eclipse中创建属性文件

  1. 首先,需要在Eclipse中创建以下java项目结构。项目名称和包名称可以是任何有效名称。

  1. 右键单击主项目文件夹,然后选择新建->其他

  1. 在下一个窗口中,选择General->File(常规->文件)并单击‘Next’(下一步)按钮

  1. 在新文件资源窗口中提供扩展名为“.properties”的有效文件名,然后单击“Finish”按钮

  1. 名为“application ation.properties”的文件必须显示在项目结构上

步骤2)将数据存储到属性文件

  1. 数据以键-值对的形式存储在属性文件中,其中键在整个文件中是唯一的。
  2. 我们将尝试使用属性文件通过定位器值来标识Webelements。
  3. 在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)从属性文件读取数据

  1. 可以使用java.util包中提供的内置Properties类从属性文件读取数据。
  2. 最初,需要创建Properties类的对象,如下所示
Properties obj = new Properties();
  1. 我们需要使用属性文件的路径创建FileInputStream类的对象
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir")+"\\application.properties");
  1. 从属性文件中读取数据可以使用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文件

  1. 下面的java项目结构需要在Eclipse中创建。

  1. 右键单击项目文件夹,选择新建->其他

  1. 选择XML文件夹中的XML文件,然后单击“下一步”按钮

  1. 输入有效的XML文件名,然后单击“Finish”按钮

  1. 将向项目文件夹添加一个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中创建两种类型的对象存储库
    1. 使用属性文件的对象存储库
    2. 使用XML文件的对象存储库
  • 属性文件是文本文件,其中数据以键-值对的形式存储
  • XML文件格式将复制构建网页所基于的HTML格式。

IT赶路人

专注IT知识分享