- id定位
语法: find_element_by_id()
例子:
根据上图我们可以看出,百度输入框是一个叫<input>的标签(HTML基础知识),里面有类型(type)、class、name、id,首页我们以id作为查询项,进行元素定位。
因为我们没有做任何操作,所有该打开只是自动打开浏览器并查找元素,下图表示查找到了元素。find_element_by_id表示以id查找。
- name定位
语法: find_element_by_name()
例子:
根据上图我们可以看出,百度输入框是一个叫<input>的标签(HTML基础知识),里面有类型(type)、class、name、id,首页我们以name作为查询项,进行元素定位。
运行结果:因为我们没有做任何操作,所有该打开只是自动打开浏览器并查找元素,下图表示查找到了元素。find_element_by_name表示以name查找。
3. class定位
语法:find_element_by_class_name()
方法同1和2,不提供案例。
4. tag定位
语法:find_element_by_tag_name()
注意:如果懂HTML知识,我们就知道HTML是通过tag来定义功能的,比如input是输入,table是表格,等等...。每个元素其实就是一个tag,一个tag往往用来定义一类功能,我们查看百度首页的html代码,可以看到有很多div,input,a等tag,所以很难通过tag去区分不同的元素。基本上在我们工作中用不到这种定义方法,仅了解就行。
因此不建议使用。故不提供案例。
5. link定位
语法:find_element_by_link_text()
专门定位文本连接的。
例子:
6. partial_link定位
语法:find_element_by_partial_link_text()
注:partial_link_text定位是对link_text定位的补充,partial_like_text为模糊匹配;link_text 全部匹配。
partial_link_text定位实现步骤与link_text和id定位实现步骤相似。
不提供案例。
7.Xpath元素定位
7.1Xpath介绍
Xpath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于XPointer与XSL间的语法模型。但是XPath很快的被开发者采用来当作小型查询语言。
Xpath不是selenium专用,只是作为一种定位手段,为selenium所用。Xpath是一门在xml文档中查找信息的语言。Xpath可用来在xml文档中对元素和属性进行遍历。由于html的层次结构与xml的层次结构天然一致,所以使用Xpath也能够进行html元素的定位。
7.2Xpath打开方式
采用浏览器自带工具进行元素定位。
法1:先确定需要定位元素,然后右键点击“检查”,即出现【htlm】页面,按“Ctrl+f”快捷键出现定位窗口。点击如图图标(Ctrl+Shift+C亦可),再去点击需要定位元素。
法2:在浏览器页面点击右上角“自定义”后点击“更多工具”——>“开发人员工具”即可。后续同第一点。
7.3Xpath定位方法
7.3.1绝对路径定位
定义:将Xpath表达式从html的最外层节点,逐层填写,最后定位到操作元素。语句以/开始。
步骤:步骤:选中元素后,在控制器内右键点击“copy”,选择点击“copyallxpath”即能复制出完整路径。
(以慕课网页面为例)
例:/html/body/div[2]/div/div[1]/a/img)
复制后按ctrl+f,粘贴后就可以选中该元素,如下图:
注:这种方法,一旦路径有变化会导致定位失败,所以不推荐使用该方式。
7.3.2相对路径定位
绝对路径与相对路径的差别与文件系统中的绝对和相对路径类似,相对路径是只给出元素路径的部分信息,在html的任意层次中寻找符合条件的元素。
语句以//开始。
例://*[@id="logo"]/a/img
通过相对路径定位元素,提取的是元素的部分特征,只要提取恰当,能够保证版本间稳定,是进行自动化测试的首选,示例中通过相对路径直接定位,实际使用中会结合属性等其他特征,共同定位。
7.3.3属性值定位
语法://标签[@属性=”属性值”]
例://a[@class="newcomer js-ad-click hide"]
7.3.4属性值模糊匹配定位
1)starts-with定位
语法://标签[starts-with(属性,’属性值’)]
例://div[starts-with(@class,'u')]
2)contains定位
语法://标签[start-with(属性,’属性值’)]
例://a[contains(@href,'setprofile')]
7.3.5文本内容定位
语法://标签[text()=”属性值”]
例://a[text()="专栏"]
7.3.6轴定位
轴可定义相对于当前节点的节点集;
1)parent
选取当前节点的父节点,也就是当前节点上一级节点。
语法:具体元素/parent::标签
例://a[text()="慕课教程"]/parent::li
2)child
选取当前节点的子节点,也就是当前节点的下一级节点。
语法:具体元素/child::标签
例子://div[contains(@class,'addZ-index')]/child::div[1]
3)ancestor
选取当前节点的所有上层节点。
语法:具体元素/ancestor::标签
例://div[contains(@class,'addZ-index')]/ancestor::body
注:ancestor只能找上层节点,如果是上层节点的兄弟节点是找不到的。
4)descendant
选取当前节点的所有下层节点。
语法:具体元素/descendant::标签
例://div[contains(@class,'addZ-index')]/descendant::button
5)following
选取当前节点之后显示的所有节点。
语法:具体元素/following::标签
例://td[@width='50%']/following::div[contains(text(),'行政区域')]
6)following-sibling
选取当前节点之后所有的兄弟(平级)节点
语法:具体元素/following-sibling::标签
例://div[@id="header"]/following-sibling::a
7)preceding
选取当前节点前面所有的节点.
语法:具体元素/preceding::标签
例://div[contains(@class,'container-types')]/preceding::div[@class="bgfff"]
8)preceding-sibling
选取当前节点前面所有兄弟(平级)节点
语法:具体元素/preceding-sibling::标签
例://div[contains(@class,'bg000')]/preceding-sibling::div[@class="bgfff"]
8、Xpath定位拓展
1)定位拓展
使用通过子节点定位父节点
例://a[text()="数据库"]/../..
其中//a[text()="数据库"]代表子节点,//a[text()="数据库"]/..代表含数据库这个的子节点的父节点,//a[text()="数据库"]/../..
则为爷爷节点。
2)布尔定位
Or、and、not
以and为例://a[contains(@href,'ki') and @target="_self"]
8.Css元素定位
8.1class定位
语法:标签.class的值
例子:input.s_ipt
8.2id定位
语法:标签.id的值
例子:input#su
8.3其它属性定位
(1)子类定位“>”:通过先定位父类(self),再定位self下的子类
例子:
(2)同级定位“+”: 通过先定位父类(self),再定位self 同级的类
例子:div#m+div#s-hotsearch-wrapper
(3)后代定位 “ ”:通过先定位父类(self),再定位self 后代的类.
……
定位元素目标 | CSS |
所有元素 | * |
所有div元素 | div |
所有div元素子元素 | div>* |
根据ID属性获取元素 | div#id |
根据class属性获取元素 | div.class |
拥有某个属性的元素 | *[href=''] |
所有div元素的第一个子元素 | div>* :first-child |
所有拥有子元素a的div元素 | 无法实现 |
input的下一个兄弟元素 | input+* |