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. [暑假集训Day3T3]平板涂色

    同样是搜索经典题. 优化并不多,只需在当前步数已经大于目前答案时剪枝就可以了. 此题重点在于如何判断第k个矩形能不能选. 设矩形i的左上坐标为i(squ[i].upx,squ[i].upy),右下角坐 ...

  2. Django读写分离

    多数据库配置 数据库配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join ...

  3. python 丰田经销商

    import requests import json from dbutil.pgsql import PgsqlPipeline from datetime import date headers ...

  4. CSS中的关系选择器

    关系选择器是指根据与其他元素的关系选择元素的选择器,常见的符号有空格.>.~,还 有+等,这些都是非常常用的选择器. 后代选择器:选择所有合乎规则的后代元素.空格连接. 相邻后代选择器:仅仅选择 ...

  5. elasticsearch 深入 —— 结构化搜索

    结构化搜索 结构化搜索(Structured search) 是指有关探询那些具有内在结构数据的过程.比如日期.时间和数字都是结构化的:它们有精确的格式,我们可以对这些格式进行逻辑操作.比较常见的操作 ...

  6. linux性能分析工具Ntop

  7. AES加密的C语言实现

    摘自网上一种AES加密,用C语言实现通过32字节密钥对16字节长度数据进行加密. #include <string.h> #include <stdio.h> #ifndef ...

  8. kafka2.3集群搭建

    环境: 3台centos7.4 3台zookeeper3.4.14 1. wget http://mirror.bit.edu.cn/apache/kafka/2.3.0/kafka_2.11-2.3 ...

  9. git提交代码冲突解决

    1.git stash save "说明信息" 2.git stash lish 3.git pull 4.git stash pop stash@{编号}

  10. C# 微信公众号开发本地IIS调试

    由于最近公司需要自己开发微信,这个任务也就交给我了,由于第一次接触开发微信,所以也踩了不少坑,不过园子里文章也很多,也借鉴了不少文章,弯路也是少走了不少,现在将我自己踩的坑或者一些经验留下来,希望能帮 ...