对象存储库 Selenium

⚡ 智能摘要

对象存储库 Selenium 将元素定位器集中在一个外部文件中,使其与测试脚本分离。这种方法提高了可维护性,并允许测试人员在一个地方更新定位器,而无需编辑多个测试用例。

  • 🗂️ 核心理念: 将用户界面定位器存储为键值对,并与……分开保存。 Selenium WebDriver 测试逻辑。
  • 📄 属性文件方法: 将定位器存储在 .properties 文本文件中,运行时通过 java.util.Properties 类读取。
  • 🧩 XML文件方法: 使用文档对象模型和 dom4j 通过 selectSingleNode 读取 XML 文件中的定位器。
  • 🔧 实施流程: 创建文件,存储键值数据,将值读取到变量中,然后将它们传递给 findElement 函数。
  • 🛡️ 维护效益: 当定位器发生更改时,只需更新存储库文件,而无需更新每个受影响的测试用例。

对象存储库 Selenium

什么是对象存储库?

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

使用对象库的主要优势在于将对象与测试用例分离。如果某个网页元素的定位器值发生变化,只需修改对象库,而无需修改所有使用该定位器的测试用例。维护对象库可以提高框架实现的模块化程度。

对象存储库的类型 Selenium 网络驱动程序

Selenium WebDriver 默认不提供内置的对象存储库。但是,可以使用键值对的方式构建对象存储库,其中键指的是对象的名称,值指的是用于在网页中唯一标识对象的属性。

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

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

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

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

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

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

在中创建属性文件 Eclipse

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

在中创建属性文件 Eclipse

  1. 在下一个窗口中,选择“常规”->“文件”,然后单击“下一步”按钮。

在中创建属性文件 Eclipse

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

在中创建属性文件 Eclipse

  1. 项目结构中必须显示名为“application.properties”的文件。

在中创建属性文件 Eclipse

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

  1. 数据以键值对的形式存储在属性文件中,其中键在整个文件中是唯一的。
  2. 我们将尝试使用属性文件,通过定位器值来识别网页元素。
  3. 打开 application.properties 文件 Eclipse 并存储以下数据
MobileTesting=//a[text()='MOBILE TESTING']
EmailTextBox = philadelphia-field-email
SignUpButton = philadelphia-field-submit

将数据存储到属性文件

4)本教程使用以下演示网站:

https://demo.guru99.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 来识别网页内的移动测试链接。

步骤 4)在测试脚本中使用属性文件

可以通过从属性文件中读取数据并将其作为参数传递给 `findElement` 方法,在测试脚本中使用属性文件。以下代码演示了如何在测试脚本中使用从属性文件中读取的数据。

driver.findElement(By.xpath(obj.getProperty("MobileTesting"))).click();
driver.findElement(By.id(obj.getProperty("EmailTextBox"))).sendKeys("testguru99@gmail.com");
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("https://demo.guru99.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);
        // Navigate 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("testguru99@gmail.com");
        driver.findElement(By.id(obj.getProperty("SignUpButton"))).click();
    }

}

Selenium 使用 XML 文件的 WebDriver 对象存储库

XML 代表可扩展标记语言。XML 文件使用文档对象模型 (DOM) 作为基本结构。XML 文件格式会复制网页所基于的 HTML 格式。以下是我们将要涵盖的主题列表。

步骤 1)在 eclipse 中创建一个 XML 文件

  1. 需要在以下位置创建 Java 项目结构 Eclipse.

在中创建 XML 文件 Eclipse

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

在中创建 XML 文件 Eclipse

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

在中创建 XML 文件 Eclipse

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

在中创建 XML 文件 Eclipse

  1. XML 文件将添加到项目文件夹中,如下所示

在中创建 XML 文件 Eclipse

步骤 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 中

将数据存储到 XML 文件

在设计选项卡中你会看到

将数据存储到 XML 文件

步骤 3)从 XML 文件读取数据

1. 可以使用 Java 内置的 'dom4j' 类从 XML 文件中读取数据。请注意,在继续编写代码之前,需要将以下 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("testguru99@gmail.com");
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("https://demo.guru99.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("testguru99@gmail.com");
        driver.findElement(By.id(signUpButton)).click();

    }
}

下载 WebDriver Eclipse 项目

常见问题

对象库仅在外部存储元素定位器。页面对象模型是一种更广泛的模式,它将定位器和页面操作封装在页面类中。

是的。定位器也可以存储在 Excel 或 CSV 文件中,使用 Apache POI 等库读取并传递给 findElement 函数。

使用清晰、描述性的键,按页码对定位器进行分组,优先使用稳定的定位器(例如 ID),并避免重复。每个模块维护一个存储库,以便定位器更改只会更新单个条目。

是的。一些人工智能辅助工具会扫描页面,检测元素,并将生成的定位器导出到存储库中。测试人员仍需检查这些定位器的稳定性。

AI自愈功能会在运行过程中观察元素属性,并在存储的定位器失效时自动选择替代匹配项。这样即使界面发生细微变化,测试也能持续运行,并降低维护成本。

总结一下这篇文章: