God help those who help themselves 天道酬勤

测试自动化(xpath定位)

cvBug·2024-05-06 11:59·257 次阅读

测试自动化(xpath定位)

测试自动化(xpath定位)

【概要】#

XPath是一种用于在XML和HTML文档中定位元素的语言,基本语句为

【//元素类型[@元素属性= ‘’ ]】其中,元素类型前须加//,可选【span、input、button、div、h1、h2】等html元素,元素属性前须加@,可选【class、placeholder、id】等元素属性

在选择定位元素时,常选择唯一且不变的值,有如下定位方式:

  1. 通过元素名称定位:
    <div>
      <p>文本内容</p >
    </div>
    XPath: //div 或 //p
  2. 通过属性定位:
    <input type="text" id="myInput" class="input-field">
    XPath: //*[@id="myInput"] 或 //*[@class="input-field"]
  3. 通过层级关系定位:
    <div class="container"> <h2>标题</h2> <p>内容</p > </div>
    XPath: //div[@class="container"]/h2 或 //div[@class="container"]/p
  4. 通过索引定位:
    <ul>
      <li>列表项1</li>
      <li>列表项2</li>
      <li>列表项3</li>
    </ul>
    <ul> 
    XPath: (//li)[2] 或 (//li)[last()]
  5. 通过文本内容定位:
    <p>这是一段文本内容</p >
    XPath: //*[text()="这是一段文本内容"]
  6. 通过父元素定位
    div class="container">
      <h2>标题</h2>
      <p>内容</p >
    </div>
    XPath: //h2/parent::div
  7. 通过子元素定位:
    <div class="container">
      <h2>标题</h2>
      <p>内容</p >
    </div>
    XPath: //div[child::h2]
  8. 通过兄弟元素定位
    <ul>
      <li>列表项1</li>
      <li>列表项2</li>
      <li>列表项3</li>
    </ul>
    XPath: //li[preceding-sibling::li] 或 //li[following-sibling::li]
  9. 通过属性值包含特定字符串定位:
    <input type="text" id="inputField" name="username">
    XPath: //*[contains(@id, "Field")] 或 //*[contains(@name, "user")]
  10. 通过属性值开头或结尾的定位
    < a href=" ">示例链接</ a>
    XPath: //*[starts-with(@href, "https://")] 或 //*[ends-with(@href, ".com")]

部分页面的id属性不固定,选择其他定位方式即可;可通过逻辑运算符【and】【or】【not】精确定位,例如,要查找具有class属性值为"foo"并且id属性值不是"bar"的元素,可以使用XPath表达式//*[@class="foo" and not(@id="bar")]。支持通配符【*】

【步骤】#

1. 打开需要定位的网址,如【https://example.com/】或【10.180.145.156】,按F12查看页面html元素

2. 点击如图箭头(chrome快捷键【ctrl + shift + C】),再点击要定位的元素,右侧html页面自动跳转到对应的元素语句。

3. 查看需要定位的元素类型、属性,包括【class】,【placeholder】等,如当前html元素如下

使用xpath语句【//input[@placeholder = ‘请选择Qos优先级’]】即可定位。

使用父元素定位找到保存button

定位语句如下:

下拉列表定位时,使用text()内容定位,示例如下:

首先找到触发下拉框点击事件的元素,该例为

其次,使用【placeholder】定位该【input】元素,Xpath语句为

最后,找到下拉框选项元素位置,如下图

文本内容在该页面唯一,使用文本内容定位

【问题汇总】#

【问题1】使用【id】定位时报错,找不到该xpath元素

【解决1】重新打开网址,发现【id】元素值不固定,每次渲染由代码生成,会发生变化,不能用于元素定位。

【问题2】元素定位成功后,如何模拟点击事件

【解决2】使用driver的【find_element_by_xpath】函数定位,再调用【click】函数模拟点击事件,示例如下:

【问题3】下拉列表如何定位

【解决3】使用span的text()进行定位,本文有示例

【问题4】如何确认是否添加ssid成功

【解决4】保存成功后网页会有一个弹窗通知,通过分析可知网页通知为新增一个div标签,定位该元素是否存在可知ssid是否成功创建

【问题5】改变射频管理的参数后,显示修改成功,但参数回调修改前参数

【解决5】参数信息保存在数据库,capwap隧道没建立,参数信息回调

【问题6】如何通过SSH获取SSID信息

【解决6】使用命令【redis-cli】进入redis命令行工具,【keys *】【hkeys CAPWAP:WLAN】查看当前有哪些SSID存在,【hget CAPWAP: WLAN XX】查看ssid具体信息,其中xx为ssid名称。使用【hget CAPWAP:Radio:5G】查看当前射频管理参数,【hget CAPWAP:Radio:5G xx】查看具体参数值

C:\Users\ZHAOXU~1\AppData\Local\Temp\WeChat Files\11b76153c142bb1bf906fca2db6c839.png

【问题7】射频管理使用固定元素定位失败,报错显示:

使用“/html/body/div[2]/div[2]/div/div/div[1]/ul/li[1]/span”

使用“/html/body/div[2]/div[2]/div/div/div[1]/ul/li[1]”

【解决7】使用绝对加相对路径进行元素定位,如

【问题8】删除操作时,通过tr定位同表元素,如通过‘autotest’定位删除按钮

【解决8】使用两次parent定位

posted @   专心写Bug  阅读(257)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
目录
点击右上角即可分享
微信分享提示