1、id定位: find_element_by_id()

2、name定位: find_element_by_name()

3、class定位:find_element_by_class_name()

4、tag定位:find_element_by_tag_name()

5、link定位:find_element_by_link_text()

6、partial_link定位:find_element_by_partial_link_text()

7、xpath定位:find_element_by_xpath()

8、CSS定位:find_element_by_css_selector()

 

针对这些定位方式,我们一般的优先选择顺序:ID>Name>CSS>XPath,但前提是能够精确定位到索要的元素

原因:id和name不受html结构的影响,可直接定位到,维护成本较低,相对于name而言,同页面下id具有唯一性(一般情况),而name可能会重复使用。

tag定位主要针对一组元素进行定位,如:单选框/复选框,使用场景比较单一

css与xpath相比较而言,搜索更快,性能更好,但css在底层也会翻译成xpath。

原因:原因不详

个人理解

  • xpath需要保证路径的完整性,而css不需要;
  • xpath是xml文档查找节点的语法,类似于在系统中查找某个文件,需要按照所查元素的路径一层一层进行查找
  • css 通过属性直接查找,

两者区别:

  • CSS表达式更加简洁,
  • css在chrom,火狐查找速度快一些,效率高一些,xpath在IE浏览器相对快一些(ie浏览器无论是css,xpath都比谷歌,火狐要慢)
  • CSS不支持文本搜索,XPATH支持文本搜索text()
  • xpath支持的函数特别多,CSS选择器支持的函数比较少,所以在复杂元素查找时候,xpath反而更加简洁,所以xpath功能更加强悍

一般情况下:当查找元素比较简单,用css没错,如果复杂,用xpath比较好

 

 

 

id定位:通控制台中的id属性进行定位,如id=“kw”

# 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/')
# 通过id定位搜索框,并输入selenium
driver.find_element_by_id('kw').send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

 name定位:通控制台中的id属性进行定位,如name="wd"

# 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/')
# 通过name定位搜索框,并输入selenium
driver.find_element_by_name('wd').send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

 name定位:通控制台中的class属性进行定位,如class="s_ipt"

# 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/')
# 通过class定位搜索框,并输入selenium
driver.find_element_by_class_name('s_ipt').send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

 tag定位: 每个元素其实就是一个tag,一个tag往往用来定义一类功能,我们查看百度首页的html代码,可以看到有很多div,input,a等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/')
# 通过tag定位搜索框,并输入selenium, 此处必报错
driver.find_element_by_tag_name('input').send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

 link定位:此种方法是专门用来定位文本链接的,属性为连接的txt文本.定位百度中的“新闻”连接

# 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/')
# 通过link定位"新闻"这个链接并点击
driver.find_element_by_link_text('新闻').click()
# 等待5秒
sleep(5)
# 退出
driver.quit()

  partial_link定位:针对连接为长文本的属性进行定位,比如定位“新闻”

# 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/')
# 通过partial_link定位"新闻"这个链接并点击
driver.find_element_by_partial_link_text('闻').click()
# 等待5秒
sleep(5)
# 退出
driver.quit()

  xpath定位:

概念:

  • xpath是什么?XML路径语言。用来在HTML/XML文档中查找信息的语言。
  • xpath使用路径表达式来获取节点/节点集,和常规电脑文件路径类似。
  • 绝对路径 / 和相对路径//:/从根节点开始;//相对路径(推荐用),相对于整个源码查找;

1.绝对路径定位:

从根路径开始写,直到所要查询的元素节点为止

2.相对路径定位:

//form//span//input表示:从索要查的元素进行反推,直到具有唯一性的节点开始写

3.元素索引定位:

//form//input[3]表示:form标签下的第三个input

4.节点唯一性的属性进行匹配定位

开头增加//*查找绝对路径下的任意属性,如://*[@id='wh'],标识根源素下任意一个id='wh'的元素,

而//后可直接跟标签,如//input,标识根路径下第一个input标签

我们可以通过反推的原理进行排查,找到所要查询元素的上层的唯一元素,利用开头加//*的方法,先找的这个上层元素,再通过/来进行逐级编写,如://*[@id='wh']/input[@id='txt'].如果id='wh'与input[@id='txt']中间有两个层级,我们需要在中间增加两个/*/*,才能保证路径的统一,如://*[@id='wh']/*/*/input[@id='txt']

2.节点部分属性匹配定位:

  • contains来进行辅助定位

根目录下查找a标签中包含href属性且属性中包含logout的元素,如://a[contains(@href, ‘logout’)]

  • starts-with来辅助定位

根目录下查找a标签下name属性以wd开头的元素,如://a[starts-with(@name,'wd')]

3.组合形式定位

不使用节点唯一性定位时,如://*[@id='form']/span[1]/input 表示:查找id属性为form的节点下第一个span节点下的input

# 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定位搜索框,并输入selenium
driver.find_element_by_xpath("//*[@id='kw']").send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

  

 

posted on 2024-04-24 14:37  会锻炼的猪  阅读(21)  评论(0编辑  收藏  举报