web-UI自动化必会技能—xpath轴,了解一下?

简介: web-UI自动化必会技能—xpath轴,了解一下?

本来以为不会再更新UI自动化相关的东西了,不过最近群里的朋友在搞UI,提出了许多问题,我看了下,大多还是页面元素定位类的问题,那今天就再讲点。


一、先了解xpath


说到元素定位,大家应该都知道常见的几种定位方式:


  • find_element_by_name()
  • find_element_by_id()
  • find_element_by_css_selector()
  • find_element_by_xpath()


在定位中,一般情况下,是奔着怎么简单怎么来就好。比如元素带有id的话,那直接根据id来定位。


但是,实际情况中,你可能通篇都找不到id,比如知乎的首页,wtf?


别慌,我们有xpath,不怕不怕。


我之前实现的一个项目,前端就是使用了vue,逼得我只能用xpath去定位,不过用下来发现xpath非常强大且灵活,学会绝对不亏。


举例,还是知乎的首页图,右上方有个回答问题的元素,我现在要去定位它,用xpath://div[.='回答问题'],够简单吧?


对了,这里提一个小tips:当你调试页面的定位语法时候,只需要按F12打开元素页面,然后Ctrl+F,在底部的输入框里输入定位语法即可。


此外,如果使用xpath定位上述例子中的情况,还可以更方便的参数化封装。

比如,我除了要定位“回答问题”,旁边的“发视频”、“写文章”、“写想法”我后面都会用到,那这样就很简单了。


通常,你只需要把//div[.='回答问题']中的文字调整就好了,这时候你就可以进一步抽象出来,以语言为例:


def locate_demo(button_name):
    """
        定位按钮元素,传参:按钮名称
    """
    driver.find_element_by_xpath("//div[.='{}']".format(button_name))


伪代码供参考,是不是觉得xpath还是挺不错的,但是,还不够。


当你的项目逐步深入的时候,你对于定位的通用性追求也会越来越高,需要尽量的抽取通用的封装以供复用,那么对应的,你可能会遇到越来越复杂的层级定位,这时候xpath轴就要登场了。


二、xpath轴登场


其实也比较简单,你只需要2个步骤即可学会。


第一步:认真看下我贴出来的语法


1268169-20200525185311776-1690395330.png


第二步:练习(─━ _ ─━✧)


语法这些东西都一样,熟能生巧,多练习就行了。


举个实际场景应用的例子,说明下xpath轴的优点:


1268169-20200525185336888-858392322.png


如图所示,这是一个很常见的系统列表。


需求:我现在需要基于列表页进行一个方法的封装,用于通过传入数据名称,可以勾选数据前的勾选框。


解析:既然是要根据不同的列表数据名称找到前面对于的勾选框,那么就来先定位列表名称,很简单,xpath://div[.='景区DPA跳转测试'],在代码里可以用format去参数化,比如


def locate__checkbox_by_name(name):
    driver.find_element_by_xpath("//div[.='{}']".format(name))


现在定位到了名称,那么如何定位前面的勾选框呢?


1268169-20200525185510230-654313394.png


可以看到,黄色高亮部分是定位到的数据名称。checkbox元素所在的节点位于名称元素的上方。再继续看,checkbox往上找第5个父级节点,与黄色高亮的名称元素的父节点处于兄弟级别,那么这时候我们可以用xpath轴来定位了(语法见上部分的图)。


xpath轴定位:思路很简单,就是先定位到黄色高亮区域的父级节点,再通过父级节点定位到前面的兄弟节点,然后再定位到checkbox元素。也就是:


1. //div[.='景区DPA跳转测试']/parent::td


1268169-20200525185609467-1134333217.png


2. //div[.='景区DPA跳转测试']/parent::td/preceding-sibling::td


1268169-20200525185621354-684301820.png


3. //div[.='景区DPA跳转测试']/parent::td/preceding-sibling::td//input


1268169-20200525185632627-949030390.png


所以,最终封装操作的方法定位可以这么写:


def locate__checkbox_by_name(name):
    driver.find_element_by_xpath("//div[.='{}']/parent::td/preceding-sibling::td//input".format(name))


是不是很方便?定位的灵活性也大大提高了。

相关文章
|
12天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
48 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
1月前
|
XML JavaScript 前端开发
JavaScript控制台:提升Web开发技能的秘密武器
作为Web开发人员,掌握JavaScript控制台中的各种方法至关重要。本文介绍了22种实用的console方法,从基本的log()到高级的profile()和memory,每种方法都配有示例和说明,帮助开发者更高效地调试和记录信息。通过了解这些工具,您可以优化代码、提高开发速度,减少错误,使编码过程更加顺畅愉快。
37 1
JavaScript控制台:提升Web开发技能的秘密武器
|
22天前
|
JavaScript 前端开发 数据安全/隐私保护
Web开发者必看:手把手教你如何轻松播放m3u8流地址,解锁视频播放新技能,让你的项目更上一层楼!
【10月更文挑战第23天】随着互联网技术的发展,m3u8格式因良好的兼容性和高压缩率被广泛用于网络流媒体传输。本文介绍如何在Web端播放m3u8流地址,包括引入视频播放器(如Video.js)、创建播放器容器、初始化播放器及播放m3u8流的具体步骤。此外,还涉及处理加密m3u8流的示例。
70 1
|
13天前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
|
16天前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
13 0
|
2月前
|
前端开发 机器人 测试技术
【RF案例】Web自动化测试弹窗处理
在进行Web自动化测试时,常会遇到不同类型的弹窗,如ajax、iframe、新窗口及alert/Confirm等。这些弹窗可通过Selenium进行定位与处理。其中,ajax弹窗直接定位处理;iframe需先选中再操作;新窗口类似iframe处理;而alert/Confirm则需特殊方法应对。在Robot Framework中,需先定义并获取窗口后使用特定关键字处理。此外,还有部分div弹窗需在消失前快速定位。希望本文能帮助大家更好地处理各类弹窗。
42 6
【RF案例】Web自动化测试弹窗处理
|
1月前
|
Web App开发 Java 测试技术
一、自动化:web自动化。Selenium 入门指南:从安装到实践
一、自动化:web自动化。Selenium 入门指南:从安装到实践
40 0
|
1月前
|
JavaScript 测试技术 持续交付
使用 GitLab CI/CD 管道自动化部署 Web 应用
【10月更文挑战第2天】使用 GitLab CI/CD 管道自动化部署 Web 应用
40 0
|
2月前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
103 4
|
2月前
|
缓存 安全 PHP
深入PHP:从基础到高级,掌握现代Web开发的关键技能
【9月更文挑战第25天】在数字化浪潮中,PHP作为一门历史悠久且广泛使用的服务端脚本语言,扮演着至关重要的角色。本文将带领读者穿越PHP的丛林,从基本语法到面向对象编程,再到现代PHP框架的应用和最佳实践,逐步揭示如何利用PHP构建高效、安全的网站和应用。通过实际代码示例,我们不仅能够理解PHP的核心概念,还能学会如何在实际项目中运用这些知识。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的学习资源和灵感。
46 0