selenium 提供的xpath定位方法名为:find_element_by_xpath(xpath表达式)

Xpath基本定位语法:

  /     绝对定位,从根节点选取

  //    相对定位,从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置

  .     选取当前节点

  ..    选取当前节点的父节点

  @     选取属性,@class = "XXX" @id = "XXX"  ; 属性放在中括号[]中

  *     通配符  匹配所有. //*

  @*    通配符  匹配所有属性.//*[@*="hello"]

1. 绝对定位

  1)以 / 开头

  2)从页面根元素(<html>)开始,严格按照元素在html页面中的位置和顺序向下寻找

  3) / 左边的元素为父元素,右边的元素为直系子元素

2. 相对路径

  1)以 // 开头

  2)不考虑元素在页面中的绝对路径和位置

  3)考虑页面是否存在复合表达式的元素即可

3. 使用标签名+节点属性定位   

  //标签名[@属性名=值]

4. 组合元素索引(下标)定位

5. 通过部分属性值匹配

  //标签名[contains(@属性名,部分属性值)]

6. 使用文本内容匹配

  函数:text()

  文本全部匹配:text()=文本内容

  文本部分匹配:contains(text(),部分文本内容)

  1. # -*- coding:utf-8 -*-
  2.  
  3. '''
  4. @project: web学习
  5. @author: Jimmy
  6. @file: find_ele.py
  7. @ide: PyCharm Community Edition
  8. @time: 2019-01-18 10:56
  9. @blog: https://www.cnblogs.com/gotesting/
  10.  
  11. '''
  12.  
  13. from selenium import webdriver
  14. from selenium.webdriver.common.by import By
  15.  
  16. driver = webdriver.Chrome()
  17. driver.get('http://www.baidu.com')
  18.  
  19. '''
  20. id 绝对唯一,其次name
  21. '''
  22.  
  23. # id
  24.  
  25. driver.find_element_by_id('kw').send_keys('德玛西亚')
  26. driver.find_element(By.ID,'kw').send_keys('诺克萨斯')
  27.  
  28. # classname
  29. # 返回符合条件的第一个元素
  30. driver.find_element_by_class_name('s_ipt')
  31. # 返回符合条件的所有元素,返回值是list,每一个值都是一个Webelement对象
  32. driver.find_elements_by_class_name('s_ipt')
  33.  
  34. # tag_name
  35. driver.find_element_by_tag_name('span')
  36. driver.find_elements_by_tag_name('span')
  37.  
  38. # name
  39. driver.find_element_by_name('wd')
  40. driver.find_elements_by_name('wd')
  41.  
  42. # 链接的文本内容
  43. driver.find_element_by_link_text('贴吧') # 完全匹配文本,要一模一样
  44. driver.find_element_by_partial_link_text('贴吧') # 模糊匹配,包含即可
  45. driver.find_elements_by_link_text('贴吧')
  46. driver.find_elements_by_partial_link_text('贴吧')
  47.  
  48. # css
  49. driver.find_element_by_css_selector('')
  50.  
  51. # xpath
  52. driver.find_element_by_xpath('')
  53.  
  54. # 1. 绝对定位 : 以/开头,父/子关系
  55.  
  56. # 2. 相对定位 : 以//开头,在这个html页面中,有木有符合表达式的元素
  57. # //标签名[@属性名称=属性值]
  58. # //标签名[@属性名称=属性值 and @属性名称=属性值]
  59.  
  60. # 3. 层级定位
  61.  
  62. # 4. 文本内容定位: //标签名[text()='文本值']
  63.  
  64. # 5. 包含定位 : contains
  65. # contains(@属性名,属性值)
  66. # contains(text(),属性值)
  67.  
  68. # 6. 轴定位
  69. # ancestor : 祖先节点,包括父
  70. # parent : 父节点
  71. # preceding: 当前元素节点标签之前的所有节点(html页面先后顺序)
  72. # preceding-slibling:当前元素节点标签之前的所有兄弟结点
  73. # following: 当前元素节点标签之后的所有节点(html页面先后顺序)
  74. # following-slibling:当前元素节点标签之后的所有兄弟结点
  75. # /轴名称::节点名称[@属性名=属性值]
  76. #

Xpath - Xpath定位的更多相关文章

  1. python+selenium基础之XPATH轴定位(第二篇)

    第一篇讲了xpath定位的一些基本定位方法,这里再介绍一种:xpath轴定位,应用场景是当某个元素的各个属性及其组合都不足以定位时,那么可以利用其兄弟节点或者父节点等各种可以定位的元素进行定位. 1. ...

  2. web自动化测试---xpath方式定位页面元素

    在实际应用中,如果存在多个相同元素,包括属性相同时,一般会选用这种方式,当然如果定位属性唯一的话,也是可以使用的,不过这种方式没有像id,tag,name等容易理解,下面讲下xpath定位元素的方法 ...

  3. 用XPath精确定位节点元素&selenium使用Xpath定位之完整篇

    在利用XSL进行转换的过程中,匹配的概念非常重要.在模板声明语句 xsl:template match = ""和模板应用语句xsl:apply-templates select ...

  4. FireFox浏览器-xpath快速定位插件:Xpath Checker

    FireFox浏览器-xpath快速定位插件:Xpath Checker 插件截图:

  5. Selenium+Java(四)Selenium Xpath元素定位

    前言 关于Selenium元素定位,这是最后一篇博客. Xpath定位可以实现的功能 Selenium+Java(三)Selenium元素定位中讲的定位方式也可以实现,具体要用那种定位方式要根据自己的 ...

  6. 深入浅出xpath轴定位

    在web自动化里面经常要用到定位,常用的八种定位方式中我最喜欢xpath定位,功能很强大.结合它里面的文本定位.模糊定位.逻辑定位等,基本能搞定所有的元素定位问题. 今天要讨论的是xpath的另一种比 ...

  7. python中通过selenium简单操作及xpath元素定位&轴定位

    浏览器的简单操作 # 导入webdriver模块 # 创建driver对象,指定Chrome浏览器 driver = webdriver.Chrome() # 窗口最大化 driver.maximiz ...

  8. css选择器用法,使用css定位元素,css和xpath元素定位的区别

    css定位元素 1.什么是css? CSS(Cascading Style Sheets)层叠样式表,是一种语言,用来描述html或者xml的显示样式.在css语言中有css选择器,在selenium ...

  9. 『心善渊』Selenium3.0基础 — 7、XPath轴定位详解

    目录 1.XPath轴定位介绍 2.位置路径表达式概念 3.步的路径表达式范例 4.练习 使用XPath轴方式,可根据文档中元素的相对位置,来进行元素的定位.例如:先找到一个相对好定位的元素,在根据与 ...

随机推荐

  1. CSS3学习-用CSS制作立体导航栏

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 浅窥ArcGIS Data Store之两斑

    关于 ArcGIS Data Store,我们备受大家喜爱的suwenjiang朋友在其博客空间suwenjiang的烂笔头中贡献了<ArcGIS Data Store初体验>一文,全面讲 ...

  3. centos 离线安装 mysql 5.7

    1 . 安装新版mysql前,需将系统自带的mariadb-lib卸载. rpm -qa|grep mariadb mariadb-libs--.el7.centos.x86_64 rpm -e -- ...

  4. python3操作excel02(对excel的基础操作,进行简单的封装)3

    #!/usr/bin/env python# -*- coding:UTF-8 -*- import requestsfrom bs4 import BeautifulSoupfrom bs4 imp ...

  5. 使用脚本在Linux服务器上自动安装Kubernetes的包管理器Helm

    Helm之于Kubernetes好比yum之于Red Hat Enterprise Linux,或者apt-get之于Ubuntu. Helm是由helm CLI和Tiller组成,是典型的Clien ...

  6. Java变量、Java对象初始化顺序

    局部变量与成员变量: 局部变量分为: 行参:在方法签名中定义的局部变量,随方法的结束而凋亡. 方法内的局部变量:必须在方法内对其显示初始化,从初始化后开始生效,随方法的结束而凋亡. 代码块内的局部变量 ...

  7. C++ 值传递&引用&地址

  8. MySql数据库中where的使用

    SELECT * from runoob_tbl WHERE runoob_author='菜鸟教程'; MySQL 的 WHERE 子句的字符串比较是不区分大小写的. 你可以使用 BINARY 关键 ...

  9. Android layout的XML

    [注]此文是在学习andriod中的一些理解和总结,若有错望留言指教,谢谢 1 <RelativeLayout xmlns:android="http://schemas.androi ...

  10. 01_5_Struts_ActionMethod_DMI_动态方法调用

    01_5_Struts_ActionMethod_DMI_动态方法调用 1. ActionMethod_DMI_动态方法调用 Action执行的时候并不一定要执行execute()方法 可以在配置文件 ...