java-selenium自动化测试-元素定位方法(By XPath)1

本文介绍了XPath在HTML和XML文档中的概念,以及它与CSS定位的优缺点。详细讲解了绝对路径和相对路径的定位方式,以及如何在Selenium测试中使用ChromeDriver通过XPath找到网页元素。
摘要由CSDN通过智能技术生成

1.xpath介绍

1.1xpath概念

xpath 是XML Path的简称,HTML文档(也就是网页)本身就是一个标准的XML页面,所以我们可以使用Xpath 的用法来定位页面元素。

1.2 优缺点

  1. 优点:XPath 定位和CSS定位相比有更大的灵活性。XPath 在文档树中某个节点既可以向前搜索,也可以向后搜索
  2. 缺点:XPath 定位相比于CSS定位速度,前者会比较慢

2.xpath 定位方式

2.1 绝对路径定位

2.1.1概念

将 Xpath 表达式从 html 的最外层节点,逐层填写,最后定位到操作元素

2.1.2 格式

格式:xxx.By.xpath("绝对路径")
例子:xxx.By.xpath("/html/body/div[x]/form/input") x 代表第x个 div标签,注意,索引从1开始而不是0

2.1.3 使用

以百度为例,定位搜索框和百度按钮

WebElement searchInput = chrome.findElement(By.xpath("/html/body/div/div/div/div/div/form/span/input"));
WebElement searchBtn = chrome.findElement(By.xpath("/html/body/div/div/div/div/div/form/span[2]/input[@value='百度一下']"));

代码设计:

package com.selenium;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.concurrent.TimeUnit;

/**
 * @author admin
 * @ClassName FindElement_ByXPath
 * @description: TODO
 * @date 2023年10月27日
 * @version: 1.0
 */
public class FindElement_ByXPath {
    public static void main(String[] args) {
        // 加载驱动
        System.setProperty("webdriver.chrome.driver", ".\\tool\\chromedriver_win32\\chromedriver.exe");

        //定义Chrome对象
        WebDriver chrome = new ChromeDriver();
        chrome.manage().window().maximize();
        chrome.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
        //打开百度连接
        chrome.get("https://www.baidu.com");

        /*XML表达式
        * 绝对路径
        *   xxx.By.xpath("绝对路径")
        *   xxx.By.xpath("/html/body/div[x]/form/input") x 代表第x个 div标签,注意,索引从1开始而不是0
        * */
        WebElement searchInput = chrome.findElement(By.xpath("/html/body/div/div/div/div/div/form/span/input"));
        searchInput.sendKeys("北京大学");
        WebElement searchBtn = chrome.findElement(By.xpath("/html/body/div/div/div/div/div/form/span[2]/input[@value='百度一下']"));
        searchBtn.click();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        chrome.quit();
    }
}

缺点:页面元素位置发生改变,都需要修改,因此,不推荐使用绝对路径的写法。

2.2 相对路径定位

2.2.1 概念

相对路径,以‘//‘开头
格式:xxx.By.xpath("//标签")
例子:
	(1):xxx.By.xpath("//input[x]") 定位第x个input标签,[x]可以省略,默认为第一个
	(2):xxx.By.xpath("//div[x]/form[x]/input[x]"), [x]依然是可以省略的

2.2.2 使用

以百度为例,定位搜索框和百度按钮

XPath 表达式:
百度搜索框://form/span[1]/input
百度搜索按钮://form/span[2]/input

2.2.3 代码设计

package com.selenium;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.util.concurrent.TimeUnit;

/**
 * @author admin
 * @ClassName FindElement_ByXPath
 * @description: TODO
 * @date 2023年10月27日
 * @version: 1.0
 */
public class FindElement_ByXPath {
    public static void main(String[] args) {
        // 加载驱动
        System.setProperty("webdriver.chrome.driver", ".\\tool\\chromedriver_win32\\chromedriver.exe");

        //定义Chrome对象
        WebDriver chrome = new ChromeDriver();
        chrome.manage().window().maximize();
        chrome.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
        //打开百度连接
        chrome.get("https://www.baidu.com");
         /*相对路径
                *   xxx.By.xpath("//标签")
                *   xxx.By.xpath("//input[x]") 定位第x个input标签,[x]可以省略,默认为第一个
                *   xxx.By.xpath("//div[x]/form[x]/input[x]"), [x]依然是可以省略的*/


        WebElement searchInput = chrome.findElement(By.xpath("//form/span[1]/input"));
        searchInput.sendKeys("北京大学");
        WebElement searchBtn = chrome.findElement(By.xpath("//form/span[2]/input"));
        searchBtn.click();
        
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        chrome.quit();
    }
}

2.3 总结

绝对路径和相对路径的区别:

  • 绝对路径 以 “/” 开头, 让xpath 从文档的根节点开始解析
  • 相对路径 以"//" 开头, 让xpath从文档的任何元素节点开始解析

说明:可以通过浏览器的开发工具来获取元素的XPath表达式

浏览器调试工具获取XPath表达式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值