xpath定位在业界被戏称为元素定位的"屠龙宝刀",宝刀在手,武林我有。现在我们就来详解xpath定位方法。

一、xpath通过元素属性定位


xpath可以通过元素的属性来定位,如id,name,class,type等属性,元素的任意属性值都可以通过xpath来定位,只要这个属性值能唯一的标识一个元素

我们还以百度首页的搜索框为例,用xpath通过不同属性来定位它。

代码:

# coding = utf-8
from time import sleep
from selenium import webdriver # 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/') # 用xpath通过id属性来定位搜索框
# driver.find_element_by_xpath("//*[@id='kw']").send_keys('selenium') # 用xpath通过name属性来定位搜索框
# #driver.find_element_by_xpath("//*[@name='wd']").send_keys('selenium') # 用xpath通过class属性来定位搜索框
# driver.find_element_by_xpath("//*[@class='s_ipt']").send_keys('selenium') # 用xpath通过maxlength属性来定位搜索框
# driver.find_element_by_xpath("//*[@maxlength='255']").send_keys('selenium') # 用xpath通过autocomplete属性来定位搜索框
driver.find_element_by_xpath("//*[@autocomplete='off']").send_keys('selenium') # 等待5秒
sleep(5)
# 退出
driver.quit()

二、xpath通过限定元素标签定位


  • * 表示从当前页面所有的标签(tag)中来寻找元素
  • 有时候一个元素的属性值与其他元素是相同的,我们可以通过限定标签(tag)来定位

代码:

# coding = utf-8
from time import sleep
from selenium import webdriver # 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 用xpath限定标签名为input并通过id属性来定位搜索框
driver.find_element_by_xpath("//input[@id='kw']").send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

三、层级与属性结合定位


如果一个元素本身没有可利用的属性来定位,那么我们可以先找到它的上一级(父元素),再通过上一级来找到它。以此类推,如果它的上一级也没有可以定位的属性值,那么再找上上一级,直到找到可以定位到的那一级元素

代码:

# coding = utf-8
from time import sleep
from selenium import webdriver # 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 用xpath通过上上一级来定位搜索框
driver.find_element_by_xpath("//*[@id='form']/span/input").send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

四、标签索引定位


有时候,同一层级下有多个相同标签的元素,那么我们就只能通过标签索引来精确定位到元素了

比如我们要定位百度首页“百度一下”按钮,它的父级元素是标签<form>下的第二个<span>。这里要注意一下,这里的索引(从1开始)与python序列中的索引(从0开始)不同

代码:

# coding = utf-8
from time import sleep
from selenium import webdriver # 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
driver.find_element_by_id('kw').send_keys('selenium')
# 用xpath通过标签索引定位"百度一下"按钮
driver.find_element_by_xpath("//*[@id='form']/span[2]/input").click()
# 等待5秒
sleep(5)
# 退出
driver.quit()

五、逻辑运算


如果一个属性不能唯一地区分一个元素,需要两个或者两个以上的属性才能定位到元素,那么我们可以用逻辑运算符来连接两个或多个属性来定位元素,支持与(and),或(or),非(not)

代码:

# coding = utf-8
from time import sleep
from selenium import webdriver # 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 用xpath通过通过逻辑运算and来定位搜索框
driver.find_element_by_xpath("//*[@id='kw' and @name='wd']").send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

selenium:Xpath定位详解的更多相关文章

  1. Appium之xpath定位详解

    前面也说过appium也是以webdriver为基的,对于元素的定位也基本一致,只是增加一些更适合移动平台的独特方式,下面将着重介绍xpath方法,这应该是UI层元素定位最强大的方法啦! 以淘宝app ...

  2. 多测师讲解自动化测试 _RF课堂_定位详解(002上午)_高级讲师肖sir

    1,打开克览器 2.id定位 Input Text id=kw 我是id定位 #id定位方法 3.name定位 Input Text name=wd 我是name定位方法 #我是name定位方法 4. ...

  3. selenium:css_selector定位详解

    selenium:css_selector定位详解(css selector和xpath的比较) 来源:https://www.cnblogs.com/haifeima/p/10138154.html ...

  4. Python爬虫之selenium库使用详解

    Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...

  5. 小甲鱼PE详解之基址重定位详解(PE详解10)

    今天有一个朋友发短消息问我说“老师,为什么PE的格式要讲的这么这么细,这可不是一般的系哦”.其实之所以将PE结构放在解密系列继基础篇之后讲并且尽可能细致的讲,不是因为小甲鱼没事找事做,主要原因是因为P ...

  6. 带你走进CSS定位详解

    学习CSS相关知识,定位是其中的重点,也是难点之一,如果不了解css定位有时候都不知道怎么用,下面整理了一下关于定位属性的具体理解和应用方案. 一:定位 定位属性列表 position top bot ...

  7. iOS 后台持续定位详解(支持ISO9.0以上)

    iOS 后台持续定位详解(支持ISO9.0以上) #import <CoreLocation/CoreLocation.h>并实现CLLocationManagerDelegate 代理, ...

  8. CSS进阶内容—浮动和定位详解

    CSS进阶内容-浮动和定位详解 我们在学习了CSS的基本知识和盒子之后,就该了解一下网页的整体构成了 当然如果没有学习之前的知识,可以到我的主页中查看之前的文章:秋落雨微凉 - 博客园 CSS的三种布 ...

  9. UI自动化测试(二)浏览器操作及对元素的定位方法(xpath定位和css定位详解)

    Selenium下的Webdriver工具支持FireFox(geckodriver). IE(InternetExplorerDriver).Chrome(ChromeDriver). Opera( ...

随机推荐

  1. CodeChef Gcd Queries

    Gcd Queries   Problem code: GCDQ   Submit All Submissions   All submissions for this problem are ava ...

  2. vue简单的v-for - - 路由跳转

    前几天写了一个特特特简单的小图片页面,主要用到的就是v-for遍历以及路由跳转到详情页.路由跳转需要在router文件夹下index.js引入. 导航栏(element ui导航栏为模板): < ...

  3. Redis在windows下的环境搭建

    Redis在windows下的环境搭建 下载windows版本redis,,官方下载地址:http://redis.io/download, 不过官方没有Windows版本,官网只提供linux版本的 ...

  4. regex - POSIX 1003.2 正则表达式

    DESCRIPTION 正则表达式 (``RE''s), 在 POSIX 1003.2 中定义,包含两种类型:新式 REs (基本上指的是 egrep 使用的那些,1003.2 称其为 ``exten ...

  5. raw, SOCK_RAW - Linux IPv4 raw socket.

    总 览 #include <sys/socket.h> #include <netinet/in.h> raw_socket = socket(PF_INET, SOCK_RA ...

  6. 英伟达GPU 嵌入式开发平台

    英伟达GPU  嵌入式开发平台 1.         JETSON TX1 开发者组件 JETSON TX1 开发者组件是视觉计算的全功能 开发平台,旨在让您能够快速地安装和运行. 该组件带有 Lin ...

  7. hibernate配置注意事项

    1:多对一配置 private Set<DrawRecordModel> cjrecordsSet = new HashSet<DrawRecordModel>(); 正确 p ...

  8. 小程序之背景音乐——wx.backgroundAudioManager

    var that = this; const back = wx.getBackgroundAudioManager(); back.onPlay(() => { console.log(&qu ...

  9. wait与sleep区别?

    wait与sleep区别? 对于sleep()方法,该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. sleep()方法导致了程序暂停执行指定的时间,让出cpu给其他线 ...

  10. tensorflow的boolean_mask函数

    在mask中定义true,保留与其进行运算的tensor里的部分内容,相当于投影的功能. mask与tensor的维度可以不相同的,但是对应的长度一定要相同,也就是要有一一对应的部分: 结果的维度 = ...