51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 711|回复: 1
打印 上一主题 下一主题

如何查找获取单一元素element的方法及对应demo?(Python Selenium)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-25 16:32:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 草帽路飞UU 于 2022-8-25 16:43 编辑

Selenium 获取单一元素(find element)的主要方法有9种。在实际使用中,需要灵活根据实际情况选取不同的方法进行元素获取。

目录

1 根据id进行获取--find_element_by_id

2 根据class进行获取--find_element_by_class_name

3 根据xpath进行获取--find_element_by_xpath

4 根据name进行获取--find_element_by_name

5 根据tag name进行获取--find_element_by_tag_name

6 根据css进行获取--find_element_by_css_selector

7 根据链接的文本进行获取--find_element_by_link_text

8 根据部分链接的文本进行获取--find_element_by_partial_link_text

9 根据 By+locator定位器 进行获取--find_element



1 根据id进行获取--find_element_by_id

find_element_by_id("元素的id")

例子:获取bing的"国内版"按钮div

bing的"国内版"按钮div为:<div id="est_cn" class="est_common est_selected">国内版</div>

################################################################################

# 在selenium查找该div代码:

driver.get('https://cn.bing.com/')

button_element = driver.find_element_by_id('est_cn')

print(button_element.text) # button_element.text结果为"国内版"


2 根据class进行获取--find_element_by_class_name
find_element_by_class_name("元素的className")

例子:获取bing的"国内版"按钮div

bing的"国内版"按钮class name为'est_common est_selected'

################################################################################

# 由于该class name有空格,不能直接使用如下方法获取

driver.find_element_by_class_name('est_common est_selected') # 报异常NoSuchElementException

# 对于空格情况,取class name其中的一个就行

driver.get('https://cn.bing.com/')

button_element = driver.find_element_by_class_name('est_common')

print(button_element.text) # button_element.text结果为"国内版"

# 或者

driver.get('https://cn.bing.com/')

button_element = driver.find_element_by_class_name('est_selected')

print(button_element.text) # button_element.text结果为"国内版"

注意,在本例中使用class name任意一个也能获取正确结果,但实际使用中需要注意带空格的class name取哪一个的问题。需要取唯一能定位该元素的class name。在class name不唯一的情况,find_element_by_class_name是获取第一个class name符合条件的元素。


3 根据xpath进行获取--find_element_by_xpath
find_element_by_xpath("元素的xpath")

例子:获取bing的"国内版"按钮div

首先获取元素的xpath,可以利用Chrome的开发者工具来进行快速获取










本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2022-8-25 16:42:43 | 只看该作者
本帖最后由 草帽路飞UU 于 2022-8-25 16:44 编辑

# bing的"国内版"按钮xpath为'//*[@id="est_cn"]' 或者 全xpath为'/html/body/div[2]/div/div[3]/div[2]/div/div[1]'

################################################################################
# 在selenium查找该div代码:
driver.get('https://cn.bing.com/')
button_element = driver.find_element_by_xpath('//*[@id="est_cn"]') #使用xpath
print(button_element.text) # button_element.text结果为"国内版"

# 或者
driver.get('https://cn.bing.com/')
button_element = driver.find_element_by_xpath('/html/body/div[2]/div/div[3]/div[2]/div/div[1]') #使用全xpath
print(button_element.text) # button_element.text结果为"国内版"

4 根据name进行获取--find_element_by_name

find_element_by_name("元素的name")

例子:获取bing提交按钮元素

如下图所示,提交input的name为search

################################################################################

# 在selenium查找提交按钮元素代码:

driver.get('https://cn.bing.com/')

input_element = driver.find_element_by_name('search')

print(input_element.get_attribute('type')) # 结果为'submit'


5 根据tag name进行获取--find_element_by_tag_name
find_element_by_name("元素的tag name")
例子:获取bing的搜索表单form

################################################################################
# 在selenium查找输入表单元素代码:
driver.get('https://cn.bing.com/')
form_element = driver.find_element_by_tag_name('form')
print(form_element.get_attribute('action')) # 结果为'https://cn.bing.com/search'



6 根据css进行获取--find_element_by_css_selector
find_element_by_css_selector("元素的css")

例子:获取bing的"国内版"按钮div

################################################################################
# 在selenium查找输入表单元素代码:
driver.get('https://cn.bing.com/')
# button_element = driver.find_element_by_css_selector('#est_switch .est_selected') #唯一
# button_element = driver.find_element_by_css_selector('#est_switch .est_common') #其实bing中这个css还有"国际版"按钮,但是"国内版"是符合条件的第一个元素,所以最后获取到的还是"国内版"按钮

# 还记得find_element_by_class_name中bing的"国内版"按钮class name为'est_common est_selected'吗?
#其实对于这种带空格的class name,使用find_element_by_css_selector获取更加方便和准确
button_element = driver.find_element_by_css_selector('.est_common.est_selected')
print(button_element.text) # 结果为'国内版'

7 根据链接的文本进行获取--find_element_by_link_text
find_element_by_link_text("链接元素的文本")

例子:

如下图所示,bing首页图片链接的text为“图片”


################################################################################
# 在selenium查找"图片"链接元素代码:
driver.get('https://cn.bing.com/')
link_element = driver.find_element_by_link_text('图片')
print(link_element.text) # 结果为'图片'


8 根据部分链接的文本进行获取--find_element_by_partial_link_text

find_element_by_partial_link_text("链接元素的部分文本")

################################################################################
# 在selenium查找"图片"链接元素代码:
driver.get('https://cn.bing.com/')
link_element = driver.find_element_by_partial_link_text('图')
# link_element = driver.find_element_by_partial_link_text('片') #这样也可以
print(link_element.text) # 结果为'图片'


9 根据 By+locator定位器 进行获取--find_element
find_element(By_strategy,locator)
如下图所示,By的属性有By.ID,By.XPATH,By.LINK_TEXT等(其实就是覆盖了前面的8种类型)




例子:获取bing的"国内版"按钮div

################################################################################
# 在selenium查找该div代码:
driver.get('https://cn.bing.com/')

# button_element = driver.find_element(By.ID, 'est_cn')
# button_element = driver.find_element(By.XPATH, '//*[@id="est_cn"]')
button_element = driver.find_element(By.CSS_SELECTOR, '.est_common.est_selected')
print(button_element.text)t) # button_element.text结果为"国内版"




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-20 15:36 , Processed in 0.071886 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表