许多不切实际的鼓励,大都是来自酒肉朋友或是远方亲戚。
小编最近在学习Web 自动化测试
,所以趁热打铁,整理下相关的知识点,今天主要分享的是八大元素定位方法
,无论是移动端还是web端,八大定位方法是共用的。本篇文章还分别提供了两种版本(python、java)的元素定位方式,一种Python版本提供了两种方式,因为在selenium
中八种元素定位的底层实现均为
driver.find_element(By.xxx,"value")
1. id
id定位是通过元素的id属性来定位元素,html规定id属性在整个html文档中必须是唯一的。
Python版本
element = driver.find_element_by_id("id值")
或者
element = driver.find_element(By.ID,"id值")
Java版本
element = driver.findElement(By.id("id值"))
2. name
name定位就是根据元素属性来定位,html文档中name的属性值是可以重复的。
如果name有多个属性值,默认使用第一个。
Python版本
element = driver.find_element_by_name("name值")
或者
element = driver.find_element(By.NAME,"name值")
Java版本
element = driver.findElement(By.name("name值"))
3.class_Name
class_Name定位就是根据元素class属性值来定位元素,html通过使用class来定位元素的样式。如果class有多个属性值,默认返回第一个。
Python版本
element = driver.find_element_by_class_name("页面元素的Class属性值")
或者
driver.find_element(By.CLASS_NAME,"页面元素的Class属性值")
Java版本
element = driver.findElement(By.className("页面元素的Class属性值"))
4. tag_name
tag_name 定位是通过标签名来定位,html本质上是由不同的tag组成,每一种标签一般在页面会存在多个,所以不方便进行精准定位,一般很少用。
Python版本
element = driver.find_element_by_tag_name("标签名")
或者
element = driver.find_element(By.TAG_NAME,"标签名")
Java版本
element = driver.findElement(By.tagName("标签名"))
5. link_text
只能定位超链接标签,可以精准定位a标签的全部文本内容。
Python版本
element = driver.find_element_by_link_text("链接的全部文字")
或者
element = driver.find_element(By.LINK_TEXT,"链接的全部文字")
Java版本
element = driver.findElement(By.LinkText("链接的全部文字"))
6. partial_link_text
只能定位超链接标签,输入部分链接文字即可。
Python版本
driver.find_element_by_partial_link_text("链接的部分文字")
或者
element = driver.find_element(By.PARTIAL_LINK_TEXT,"链接的部分文字")
Java版本
element = driver.findElement(By.partialLinkText(("链接的部分文字"))
7. XPath
XPath 为XML Path的简称,是一门在XML文档中查找元素信息的语言,HTML可以看做是XML的一种表现。XPath主要是通过元素的路径来定位,其中,路径又分为绝对路径、相对路径(XML是一种标记语言,用于数据的存储和传递。)
绝对路径:从最外层元素到指定元素之间所有经过元素层级的路径
绝对路径以 html 跟节点开始,使用 / 来分割元素层级;绝对路径对页面结构要求比较严格,万一开发改了路径并且没有告诉你,所以不建议使用。
例如:/html/body/div/p[1]/input
相对路径:匹配任意层级的元素,不限制元素的位置。
相对路径以 // 开始
例如,//input 或者//*、//input[@password='密码A']
Tips:
1. 一般使用指定标签名称,不实用*代替,效率比较慢
2. 无论是绝对路径还是相对路径,/ 后面必须为元素的名称或者 *
Python版本
element = driver.find_element_by_xpath("//*[@id='username")
或者
element = driver.find_element(By.XPATH,"//*[@id='username")
Java版本
element = driver.findElement(By.xpath("//*[@id='username"))
8. CSS
css定位就是通过css选择器工具进行定位,css是一种标记语言,用于控制数据的样式。在selenium中推荐使用CSS定位,因为它比Xpath定位速度要快
Python版本
driver.find_element_by_css_selector("[name='password']")
或者
element = driver.find_element(By.CSS_SELECTOR,"[name='password']")
Java版本
element = driver.findElement(By.cssSelector("css定位表达式"))
总结
- id、name、class_name:为元素属性定位
- tag_name:为元素标签名称
- link_text、partial_link_text:为超链接定位(主要是处理a标签)
- XPath:为元素路径定位
- CSS:为CSS选择器定位
- 万能方法:XPath