51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 854|回复: 0
打印 上一主题 下一主题

selenium定位元素的细节操作你见过吗?

[复制链接]

该用户从未签到

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

文章目录
selenium WebDriver定位元素
父子、兄弟节点定位
根据父节点定位子节点
根据子节点定位父节点
根据兄节点定位弟节点
根据弟节点定位兄节点
在元素上操作
click()
send_keys()
获取元素上的文本
clear()
get_attribute()
WebDriverWait
selenium WebDriver定位元素
  • id定位:find_element_by_id()
  • name定位:find_element_by_name()
  • class定位:find_element_by_class_name()
  • link定位:find_element_by_link_text()
  • partial link定位:find_element_by_partial_link_text()
  • tag定位:find_element_by_tag_name()
  • xpath定位:find_element_by_xpath()
  • css定位:find_element_by_css_selector()

#-----------------------------------------------------------------------
# 通过元素id定位
#-----------------------------------------------------------------------
driver.find_element_by_id("userid")

#-----------------------------------------------------------------------
# 通过class_name定位
#-----------------------------------------------------------------------
# 通过class_name定位一个元素
driver.find_element_by_class_name("userclass")

# 通过class_name定位一批元素,返回结果为数组,下标从0开始
driver.find_elements_by_class_name("userclass")
driver.find_elements_by_class_name("userclass")[1].click()

#-----------------------------------------------------------------------
# 通过xpath定位元素
#-----------------------------------------------------------------------
# 根据元素属性和值定位
# 定位id="userid"的元素
driver.find_element_by_xpath("//*[@id=\"userid\"]")

# 定位placeholder属性为"请输入名字"的input元素,即<input placeholder="请输入名字">
driver.find_element_by_xpath("//input[@placeholder=\"请输入名字\"]")

# 定位id="userid"元素-下层元素span-下层元素第二个input
driver.find_element_by_xpath("//*[@id=\"userid\"]/span/input[1]")

# 多条件定位
driver.find_element_by_xpath("//input[@name=\"username\" and @value=\"lxm\"]")
//input[@name='continue'][@type='button']  # 待验证
driver.find_element_by_id("id").find_element_by_class_name("name")  # 待验证

# 根据文本定位元素
# 定位文本为“世界真美好”的li元素
driver.find_element_by_xpath("//li[text()=\"世界真美好\"]")
# 定位文本为“我爱这个世界”的span元素
driver.find_element_by_xpath("//span[text()=\"我爱这个世界\"]")

# 定位文本为“世界真美好”的li元素-可传入变量
str = "世界真美好"
driver.find_element_by_xpath("//li[text()=\"%s\"]" % str)


# 根据关键字
driver.find_element_by_xpath("//a[contains(@href,\"#id1\")]")

#在a标签下有个文本(text)包含(contains)'网页' 的元素
driver.find_element_by_xpath("//a[contains(text(),'网页')]").click()

#有个叫a的标签,他有个链接href='http://www.baidu.com/ 的元素
driver.find_element_by_xpath("//a[@href='http://www.baidu.com/']").click()



#-----------------------------------------------------------------------
# 通过tag定位元素
#-----------------------------------------------------------------------
# 查找input标签的元素
driver.find_element_by_tag_name("input")



父子、兄弟节点定位

.表示当前节点,…表示父节点,/表示绝对路径,//表示相对路径


根据父节点定位子节点
driver.find_element_by_xpath("//*[text()=\"国家\"]/div/input/span")
# child::input选取当前节点的input子节点
driver.find_element_by_xpath("//*[text()=\"国家\"]/child::div/child::input/child::span")

根据子节点定位父节点
# ..表示父节点
driver.find_element_by_xpath("//*[text()=\"上海\"]/../../span")
# parent::span选取当前节点的span父节点
driver.find_element_by_xpath("//div[text()=\"上海\"]/parent::*/parent::span")

根据兄节点定位弟节点
# 通过兄节点找到父节点,由父节点定位弟节点
driver.find_element_by_xpath("//*[text()=\"上海\"]/../span[3]")
# following-sibling 选取当前节点之后的同级节点
driver.find_element_by_xpath("//*[text()=\"上海\"]/following-sibling::span")
driver.find_element_by_xpath("//*[text()=\"上海\"]/following-sibling::span[2]")

根据弟节点定位兄节点
# 通过弟节点找到父节点,由父节点定位兄节点
driver.find_element_by_xpath("//*[text()=\"上海\"]/../span[0]")
# preceding-sibling 选取当前节点之前的同级节点
driver.find_element_by_xpath("//*[text()=\"上海\"]/preceding-sibling::span")

在元素上操作click()
# 点击操作
click()

# 单击id为userid的元素
driver.find_element_by_id("userid").click()

send_keys()
# 向元素发送文本
send_keys("luxuemei")

# 向id为userid的元素填充文本luxuemei
driver.find_element_by_id("userid").send_keys("luxuemei")

获取元素上的文本
# 获取元素文本
driver_text = driver.find_element_by_id("userid").text

clear()
# 清除元素的内容,如清除input框内的文字
driver.find_element_by_id("userid").clear()

get_attribute()
# 获取元素属性值
driver.find_element_by_id("userid").get_attribute("value")

WebDriverWait
# 文件引入
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 每0.5s定位ID为userid的元素,如果定位成功,执行下面的代码;直至30s超时抛出异常
# 可用来检查页面元素是否加载完成
WebDriverWait(driver, 30, 0.5).until(EC.presence_of_element_located(By.ID, "userid"))

















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

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-22 07:41 , Processed in 0.062304 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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