首页 > 其他分享 >XPath攻略:从入门到精通,元素查找不再难

XPath攻略:从入门到精通,元素查找不再难

时间:2024-03-28 10:55:34浏览次数:24  
标签:XPath 定位 text 元素 driver 查找 攻略 id

简介

XPath 是一种用于在 XML 文档中检索信息的语言。它通过路径表达式导航 XML 文档,广泛应用于各种场景。XPath 的灵活性和强大功能使其成为在 XML 结构中准确定位和提取数据的重要工具。

XPath 使用场景

Web 自动化测试:

  • XPath 在 Web 自动化测试中广泛应用,XPath 提供了一种强大的定位方式。它能够通过元素的层次结构、属性、文本内容等进行更加灵活和精准的定位,适用于各种复杂的 Web 应用页面。

App 自动化测试:

  • 在移动应用的自动化测试中,XPath 可以在原生应用和混合应用(Hybrid App)中定位和操作元素。在 App 的 UI 中,XPath 可以针对不同平台(如iOS和Android)提供一致的选择能力,使测试脚本更具通用性。

XPath 相对定位的优点

  • 可维护性更强:XPath 相对定位可以相对于其他元素的方式来定位元素。如果页面结构发生变化,只需要更新相对路径中的某些部分,而不必重新创建整个定位表达式。
  • 语法更加简洁:XPath 相对路径是相对于其他元素的路径,更容易理解和编写。与复杂的绝对路径相比,相对路径语法更加简洁。
  • 相比于 css 可以支持更多的方式:XPath 相对定位可以访问 XML 和 HTML 文档的任何部分,而不仅仅是元素和属性。

示例代码如下:

# 复制的绝对定位
$x('//*[@id="ember75"]/td[1]/span/a')
# 编写的相对行为
$x(" //*[text()='技术分享 | SeleniumIDE用例录制']")"SeleniumIDE用例录制']"

XPath 定位的调试方式

浏览器-console:$x("XPath 表达式")。

浏览器-elements:ctrl+f 输入 XPath 或者 css。

XPath 基础语法(包含关系)

表达式 结果
/ 从该节点的子元素选取
// 从该节点的子孙元素选取
* 通配符
nodename 选取此节点的所有子节点
.. 选取当前节点的父节点
@ 选取属性

XPath 基础语法实战

打开测试人社区(https://ceshiren.com/),F12 进入开发者模式,选择 console

整个页面

$x("/")

整个页面中的所有元素

$x("/*")

整个页面中的所有元素

$x("//*")

查找页面上所有的 div 标签节点

$x("//div")

查找 id 属性为 site-logo 的节点

$x('//*[@id="site-logo"]')

查找节点的父节点

$x('//*[@id="site-logo"]/..')

XPath 顺序关系(索引)

XPath 通过索引直接获取对应元素:

# 获取此节点下的所有的li元素
$x("//*[@id='ember21']//li")
# 获取此节点下【所有的节点的】第一个li元素
$x("//*[@id='ember21']//li[1]")

XPath 高级用法

语法 含义
[last()] 选取最后一个
[@属性名='属性值' and @属性名='属性值'] 与关系
[@属性名='属性值' or @属性名='属性值'] 或关系
[text()='文本信息'] 根据文本信息定位
[contains(text(),'文本信息')] 根据文本信息包含定位

注意:所有的表达式需要和[]结合。

XPath 高级用法实战

打开测试人社区(https://ceshiren.com/),F12 进入开发者模式。

选取最新的元素

选取最后一个 div 标签

$x("(//div)[last()]")

多个属性共同定位-交集

选取属性 id 的值为 ember24 并且属性 class 的值为 nav-item_new new ember-view 的 input 标签

$x("//*[@class='nav-item_new new ember-view' and @id ='ember24']")

多属性共同定位-交集

选取属性 id 的值为 ember24 或属性 id 的值为 ember23 的 input 标签

$x("//*[@id='ember23' or @id ='ember24']")

文本信息定位

选取所有文本信息为'所有类别'的元素

$x(' //*[text()="所有类别"]')

文本信息包含定位

选取所有文本信息包'Python 测试开发'的元素

$x('//*[contains(text(),"Python测试开发")]')

Xpath 定位-实战

测试步骤

  1. 打开测试人社区(https://ceshiren.com/)
  2. 使用 css 高级定位,进入【类别】的页面。
  3. 获取文本值进行断言。

Python 实现

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By


class Test():
    def setup(self):
        service = Service()
        options = webdriver.ChromeOptions()
        self.driver = webdriver.Chrome(service=service,options=options)
        self.driver.implicitly_wait(10)

    def teardown(self):
        self.driver.quit()

    def test_xpath(self):
        self.driver.get("https://www.ceshiren.com")
        self.driver.find_element(By.XPATH,"//*[text()='类别']").click()
        text = self.driver.find_element(By.XPATH,"//*[text()='提问区']").text
        assert text == '提问区'

Java 实现

public class web_auto_lianxiTest {
    static  WebDriver driver;
    @BeforeAll
    static  void setup(){
        driver = new EdgeDriver();

    }

    @AfterAll
    static void teardown(){
        driver.quit();

    }

    @Test
    void test4() throws InterruptedException {
        //打开浏览器页面
        driver.get("https://ceshiren.com/");
        //获取选择按钮的元素
        WebElement search = driver.findElement(By.xpath("//*[@class='search-button']"));
        //点击选择按钮
        search.click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(1));
        //获取高级搜索按钮的元素,并点击
        WebElement super_search = driver.findElement(By.xpath("//*[@class ='show-advanced-search']"));
        super_search.click();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(1));
        //点击类型下拉框
        driver.findElement(By.id("search-type-header")).click();
        //选择下拉框第二个元素点击
        driver.findElements(By.className("select-kit-row")).get(1).click();

        //找到搜素输入框,输入web自动化测试并回车
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        // WebElement bar = driver.findElement(By.id("search-bar"));
        WebElement input_serach = driver.findElement(By.xpath("//div[@class='search-bar']//input\n"));
        input_serach.sendKeys("web自动化测试");
        input_serach.sendKeys(Keys.ENTER);
        //断言对比
        String text = driver.findElement(By.className("search-results")).getText();
        assert text.contains("自动化"):"搜索结果里没有包含自动化字眼";
    }
}

总结

XPath定位是一种非常便捷的方法,不仅可以通过常规的id、class等属性进行元素定位,还可以通过父子关系和后代关系来实现更灵活的定位。这使得XPath在元素选择和定位方面具有独特的优势。

标签:XPath,定位,text,元素,driver,查找,攻略,id
From: https://www.cnblogs.com/hogwarts/p/18101068

相关文章

  • 轻松掌握:从预装Win10/11家庭中文版系统升级到最新版的操作全攻略
        Windows10和Windows11是微软推出的两个非常流行的操作系统版本,它们都提供了家庭版(Home)和专业版(Professional)等多个版本。家庭版通常是为个人用户设计的,它提供了日常使用所需的基本功能和一些高级特性,而专业版则包含了更多针对商业用户和企业环境的功能和安全特性......
  • 服务器性能监控分析工具Nmon__知乎粘来的,为了给自己做个记录,以后查找方便
    1.Nmon是什么nmon(NetworkMonitor)是一个性能监视工具,最初由IBM的NigelGriffiths开发。它主要用于在UNIX和Linux系统上实时监视系统性能和资源利用率。nmon可以提供有关CPU使用率、内存使用情况、磁盘活动、网络流量等系统性能指标的详细信息。nmon以交互式的方式运行,通过终端界......
  • 最详细爬虫零基础教程11——html格式提取之xpath
    文章目录一、html和xml二、xpath获取节点属性三、xpath语法四、案例展示总结一、html和xmllxml是一款高性能的PythonHTML/XML解析器,我们可以利用XPath,来快速的定位特定元素以及获取节点信息。区别:1.xml被设计为传输和存储数据,其焦点是数据的内容2.html是显示......
  • 国内怎么观看Netflix网飞奈飞?Netflix会员国内观看Netflix攻略
    Netflix,作为美国的流媒体播放平台,汇集了全球热门的电视剧和电影资源,支持在电脑和手机上使用,让你随时随地享受高质量影片。然而,对于国内用户来说,如何使用Netflix却是个挑战。不过,别担心,今天我将为大家提供解决方案,让你轻松畅享Netflix的精彩内容。如何在中国使用Netflix?奈飞的海......
  • 面试题:在百万keys的Redis里面,如何模糊查找某个key.
    面试题:在百万keys的Redis里面,如何模糊查找某个key.在百万级别的Redis数据库中,进行模糊查找某个key时,需要注意查询效率和对Redis服务器性能的影响。以下是一些建议和方法:1.使用SCAN命令代替KEYS由于KEYS命令在大规模数据集上执行时会阻塞Redis服务器,并可能导致严重......
  • 洛谷题单指南-图的基本应用-P5318 【深基18.例3】查找文献
    原题链接:https://www.luogu.com.cn/problem/P5318题意解读:图的建立、DFS、BFS模版题。解题思路:本题主要考察建图、图的DFS、BFS遍历。建图方式:领接表vector<int>g[N];需要注意的是,在DFS、BFS搜索领接点时,需要先将领接点编号排序,满足题目要求的“如果有很多篇文章可以参阅,请......
  • XPath定位如何在App自动化测试中大显神威
    简介和selenium类似,作为App自动化测试的主流框架,appium也是以webdriver为基础来自动化操作App的,所以对于元素定位,其实appium与selenium也是类似的,只是appium还有自己的安卓原生定位方式等方法,但是关于ID定位,name定位,xpath定位等,appium也是支持的,本篇文章就来给大家介绍一下xpath......
  • 百度百科审核不通过全攻略,一看就会!
    在撰写百度百科词条时,遇到审核不通过的情况可能会让人感到沮丧。然而,我们并不需要灰心,而是要通过一些方法来改善文章质量,使其符合百度百科的要求。腾轩科技传媒分享百度百科审核不通过全攻略,一看就会!一、了解百度百科的审核标准在撰写百度百科词条之前,首先要了解百度百科的......
  • 2024超声波清洗机避坑(省钱)攻略!超声波清洗机哪个牌子好?怎么洗眼镜才干净?怎么选超声波清
    大家犹豫要不要购买超声波清洗机,无非就是在于害怕超声波清洗机是智商税,不然就是已经买了超声波清洗机了,但是很不幸踩雷了……!如果你有这方面的焦虑的话,那么这篇文章不妨一看!关于现在风头正盛的超声波洗眼镜机我也用过不下二十多款了,真的可以很负责任的告诉大家,价格贵、参数高......
  • 二分查找算法
    二分查找算法思想1、数组要求是有序的2、定义左右边界索引l、r,中间索引m=(l+r)/23、判断arr[m]与待查找值target的大小,不断减少右边界索引r或者增加左边界索引l 基础版二分查找(1)如果target<arr[m],则证明待查找值在中间索引左侧,减少右索引r=m-1,继续下一轮查找(2)如果如果targ......