Selenium教程__元素定位(2)

这篇具有很好参考价值的文章主要介绍了Selenium教程__元素定位(2)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Selenium操作页面上的文本输入框、按钮、单选框、复选框等,凡是能在页面显示的任何元素都需要先对元素进行定位。

Selenium提供了以下方法来定位页面中元素:

  • find_element_by_id:通过id属性值进行匹配查找,返回匹配到的第一个元素,未匹配到就报错
  • find_element_by_name:通过name属性值进行匹配查找,返回匹配到的第一个元素,未匹配到就报错
  • find_element_by_link_text:通过链接内容进行完全匹配查找,返回匹配到的第一个元素,未匹配到就报错
  • find_element_by_partical_link_text:通过链接内容进行模糊匹配查找,返回匹配到的第一个元素,未匹配到就报错
  • find_element_by_tag_name:通过html标签名称进行匹配查找,返回匹配到的第一个元素,未匹配到就报错
  • find_element_by_class_name:通过class属性值进行匹配查找,返回匹配到的第一个元素,未匹配到就报错
  • find_element_by_xpath:通过xpath进行匹配查找,返回匹配到的第一个元素,未匹配到就报错
  • find_element_by_css_selector:通过CSS选择器进行匹配查找,返回匹配到的第一个元素,未匹配到就报错

上面方法只会匹配查找只会获取第一个元素。除了上面这些查找单个元素的方法之外,Selenium还定义查找多个元素的方法:

  • find_elements_by_id:通过id属性值进行匹配查找,返回所有匹配到的元素列表,未匹配到返空列表
  • find_elements_by_name:通过name属性值进行匹配查找,返回所有匹配到的元素列表,未匹配到返空列表
  • find_elements_by_link_text:通过链接内容进行完全匹配查找,返回所有匹配到的元素列表,未匹配到返空列表
  • find_elements_by_partical_link_text:通过链接内容进行模糊匹配查找,返回所有匹配到的元素列表,未匹配到返空列表
  • find_elements_by_tag_name:通过html标签名称进行匹配查找,返回所有匹配到的元素列表,未匹配到返空列表
  • find_elements_by_class_name:通过class属性值进行匹配查找,返回所有匹配到的元素列表,未匹配到返空列表
  • find_elements_by_xpath:通过xpath进行匹配查找,返回所有匹配到的元素列表,未匹配到返空列表
  • find_elements_by_css_selector:通过CSS选择器进行匹配查找,返回所有匹配到的元素列表,未匹配到返空列表

by_id

当知道元素的id属性后,可以使用该方法定位元素。

假如页面元素代码如下

<input id="username" type="text">
<input id="username" type="text">

可以这样定位元素

el = driver.find_element_by_id("username")
print(el)
els = driver.find_elements_by_id("username")
print(els)

打印定位的元素

Selenium教程__元素定位(2)

by_name

当知道元素的name属性后,可以使用该方法定位元素。

假如页面元素代码如下

<input type="text" name="username" id="username">
<input type="text" name="username" id="username">

可以这样定位元素

el = driver.find_element_by_name("username")
print(el)
els = driver.find_elements_by_name("username")
print(els)

by_link_text

当知道链接元素的内容后,可以使用该方法定位元素。该方法需要完全匹配链接中的内容,若只是部分匹配链接中的内容则定位不到该元素。

假如页面元素代码如下

<a href="#">标签a</a>

可以这样定位元素

el = driver.find_element_by_link_text("标签a")
print(el)
els = driver.find_elements_by_link_text("标签a")
print(els)
el = driver.find_element_by_link_text("标签")  # 报错
print(el)

by_partical_link_text

当知道链接元素的内容后,可以使用该方法定位元素。该方法可以部分匹配链接中的内容。

假如页面元素代码如下

<a href="#">标签a</a>
<a href="#">标签b</a>

可以这样定位元素

el = driver.find_element_by_partial_link_text("标签")     # 返回标签a元素
print(el)
els = driver.find_elements_by_partial_link_text("标签")   # 返回标签a、标签b元素
print(els)

by_tag_name

通过html标签定位元素。

假如页面元素代码如下

<div>元素1</div>
<div>元素2</div>

可以这样定位元素

el = driver.find_element_by_tag_name("div")
print(el)
els = driver.find_elements_by_tag_name("div")
print(els)

by_class_name

通过class属性值定位元素。

假如页面元素代码如下

<div class="el">元素1</div>
<div class="el">元素2</div>

可以这样定位元素

el = driver.find_element_by_class_name("el")
print(el)
els = driver.find_elements_by_class_name("el")
print(els)

by_xpath

XPath 是一门在 XML 文档中查找信息的语言。基于XML的树状结构,XPath提供在数据结构树中找寻节点的能力。

使用chrome自带的xpath定位元素的方法如下:

Selenium教程__元素定位(2)

 复制出来的XPath地址如下

//*[@id="su"]  # 选取文档中id值为su的元素

说明:

  • //*:选取文档中的所有元素。
  • @:选取属性

selenium使用xpath定位效率上比上面的方法底,但胜在灵活性高。

使用xpath通过元素内容定位

假如页面元素代码如下

<a href="#">标签a</a>

可以这样定位元素

# 类似于by_link_text,通过参数值(标签a)精准匹配包含该值的元素
el1 = driver.find_element_by_xpath("//*[text()='标签a']")
print(el1)

# 类似于by_partial_link_text,通过参数值(标签)模糊匹配包含该值的元素
el2 = driver.find_element_by_xpath("//*[contains(text(), '标签')]")
print(el2)

定位结果

Selenium教程__元素定位(2)

使用xpath通过元素属性定位

假如页面元素代码如下

<input type="text" name="username" id="username" placeholder="用户名">
<div class="el">元素1</div>

可以这样定位

el1 = driver.find_element_by_xpath("//*[@name='username']")     # 定位元素name属性值为"username"的元素
print(el1)
el2 = driver.find_element_by_xpath("//*[@placeholder='用户名']")       # 定位元素placeholder属性值为"用户名"的元素
print(el2)
el3 = driver.find_element_by_xpath("//*[@class='el']")      # 定位元素class属性值为"el"的元素
print(el3)

定位结果

Selenium教程__元素定位(2)

使用xpath层级定位

假如页面代码如下

<div class="el">
    <span><a href="#">元素1</a></span>
    <span id="me"><a href="#">元素2</a></span>
</div>

 可以这样定位

# 定位子级元素
el = driver.find_element_by_xpath("//*[@id='me']/a")    # 定位id值为me下的a标签
print(el)
# 通过已定位元素定位子级元素
el_me = driver.find_element_by_id("me")
el1 = el_me.find_element_by_xpath("a")     # 定位该元素下的a标签
print(el1)

# 定位父级元素
el = driver.find_element_by_xpath("//*[@id='me']/..")
print(el)
# 通过已定位元素定位父级元素
el = el_me.find_element_by_xpath("..")
print(el)

# 定位同级元素
el = driver.find_element_by_xpath("//*[@id='me']/../span[1]")
print(el)
# 通过已定位元素定位同级元素
el = el_me.find_element_by_xpath("../span[1]")     # 如果一个元素有多个相同标签,可以通过索引定位指定标签,索引值从1开始
print(el)

 定位结果

Selenium教程__元素定位(2)

使用xpath定位包含某属性的所有元素

假如页面代码如下

<div class="el">
    <span><a href="#">元素1</a></span>
    <span id="me"><a href="#">元素2</a></span>
</div>

可以这样定位

els = driver.find_elements_by_xpath("//*[@href]")
print(f"包含href属性的元素个数为:{len(els)}")

定位结果

Selenium教程__元素定位(2)

by_css_selector

css_selector和xpath类似,该方法是基于css选择器对元素进行定位。

使用css_selector通过属性id定位元素

假如页面代码如下

<input type="text" name="username" id="username" placeholder="用户名">

可以这样定位

el = driver.find_element_by_css_selector("#username")       # 井号表示属性id
print(el)

使用css_selector通过属性class定位元素

 假如页面代码如下

<div class="el">元素1</div>

可以这样定位

el = driver.find_element_by_css_selector(".el")
print(el)

使用css_selector通过指定属性定位元素

假如页面代码如下

<input type="text" name="username" id="username" placeholder="用户名">

可以这样定位

# 通过属性定位
el = driver.find_element_by_css_selector("[placeholder='用户名']")    # 匹配元素的placeholder属性值为'用户名'的元素
print(el)

# 通过标签+属性定位
el = driver.find_element_by_css_selector("input[placeholder='用户名']")    # 匹配元素的标签为input且其placeholder属性值为'用户名'的元素
print(el)

# 通过多属性定位
el1 = driver.find_element_by_css_selector("#username[placeholder='用户名'][type='text']")
el2 = driver.find_element_by_css_selector("input#username[placeholder='用户名'][type='text']")
print(el1 == el2)

定位结果

Selenium教程__元素定位(2)

使用css_selector通过模糊匹配属性值定位元素

假如页面代码如下

<input type="text" name="username" id="username" placeholder="用户名">

可以这样定位

# 模糊匹配
el = driver.find_element_by_css_selector("[name^=user]")  # 匹配name属性以user开头的元素
print(el)
el = driver.find_element_by_css_selector("[id$=name]")    # 匹配id属性以name结尾的元素
print(el)
el = driver.find_element_by_css_selector("[placeholder*=户]")    # 匹配placeholder属性包含户字的元素
print(el)

定位结果

Selenium教程__元素定位(2)

使用css_selector层级定位

假如页面代码如下

<div class="el">
    <span><a href="#">元素2</a></span>
    <span id="me"><a href="#">元素2</a></span>
</div>

可以这样定位

# 定位子级元素
# 直接定位子集元素
el = driver.find_element_by_css_selector("#me > a:nth-child(1)")    # 定位id为me元素下的第一个a标签,若有且只有1个a标签可以不写:后的内容
print(el)
el = driver.find_element_by_css_selector("#me a:nth-child(1)")    # 定位id为me元素下的第一个a标签,若有且只有1个a标签可以不写:后的内容
print(el)

# 通过已知元素定位子级元素
el_me = driver.find_element_by_id("me")
el = el_me.find_element_by_css_selector("a:nth-child(1)")
print(el)

注:层级与层级之间以大于号>或空格分层,查找元素定位必须一层一层往下写,有多个则匹配多个

定位结果

Selenium教程__元素定位(2)

使用css_selector定位包含某属性的所有元素

假如页面代码如下

<div class="el">
    <span><a href="#">元素1</a></span>
    <span id="me"><a href="#">元素2</a></span>
</div>

可以这样定位

els = driver.find_elements_by_css_selector("[href]")
print(f"包含href属性的元素个数为:{len(els)}")

定位结果

Selenium教程__元素定位(2)


-事必有法,然后有成- 最后祝大家早日达到测试的天花板!


Selenium教程__元素定位(2)


以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以留言【777】直接拿走就好了

 文章来源地址https://www.toymoban.com/news/detail-501052.html

到了这里,关于Selenium教程__元素定位(2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium元素定位方式及常用操作

    要想操作一个对象,首先应该识别这个对象。 定位方式有很多,但是要保证这种方式存在,且能够唯一的定位到这个元素。 1、用 id 来定位 优先选择 ※ 首先在 Chrome 浏览器上把鼠标放到搜索框,鼠标右击选择开发者模式(快捷键:f12),查看对应 id 名 2、用 name 来定位 在开

    2024年02月02日
    浏览(125)
  • selenium新版元素定位方法、元素操作与基本API

    注意:selenium新版元素定位需要导入方法By,使用By来调用元素定位方法     from selenium.webdriver.common.by import By     标签的 id属性具有唯一性,就像人的身份证,不存在根据一个id属性定位到多个标签的情况。假设有个iframe标签如下,其 id 属性值为\\\"actionFrame\\\"。 我们可以通过

    2024年02月03日
    浏览(42)
  • Selenium通过文本定位并且实现操作

    对于Selenium初学者来说,定位方式采用精准定位作为简单也就是通过获取精准的位置信息进行定位。例如: //*[@id=\\\"s-top-left\\\"]/a[1] ,通过语句 driver.find_element(By.XPATH,\\\'//*[@id=\\\"s-top-left\\\"]/a[1]\\\') 即可以精准的进行定位元素,但是此场景只针对这一个页面,也就是说类似的并不通用并且

    2024年02月12日
    浏览(32)
  • (三) selenium元素定位和常用操作(下)

    上一篇:(二) selenium元素定位(上)_要开朗的spookypop的博客-CSDN博客 本篇继续介绍常用的元素定位和常用操作。 通过链接文本定位 alerts弹窗 浏览器窗口操作 1、通过链接文本定位 上图是一个返回首页的链接,点击后跳转到首页,元素定位关键代码: driver.find_element(By.LINK_TEXT,

    2024年02月11日
    浏览(37)
  • 从0开始python学习-31.selenium 文本输入框、下拉选择框、文件上传、时间插件选择元素定位

    目录 1. 纯文本输入框 2. 存在默认值的文本输入  3. 下拉选择框 4. 输入后下拉选择框 5. 文件上传 6. 时间插件 注意: 1. 这种存在默认值的情况在做自动化测试的时候可以选择不做处理,直接略过该元素,也可以先将默认值清除后再进行输入的方式进行测试 2.如果是下图这种

    2024年02月06日
    浏览(47)
  • selenium定位元素(包括父子,兄弟)及常见操作

    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() .表示当前节点,…表示父

    2023年04月08日
    浏览(48)
  • Selenium教程__元素定位(2)

    Selenium操作页面上的文本输入框、按钮、单选框、复选框等,凡是能在页面显示的任何元素都需要先对元素进行定位。 Selenium提供了以下方法来定位页面中元素: find_element_by_id :通过id属性值进行匹配查找,返回匹配到的第一个元素,未匹配到就报错 find_element_by_name :通过

    2024年02月11日
    浏览(71)
  • Selenium实战教程系列(二)---元素定位

    Selenium webdriver能够模拟人对浏览器进行操作的前提是界面元素的定位。元素的定位可以说是Selenium自动化脚本的基础。这一小节笔者将介绍如何在selenium中进行元素的定位。 Selenium中提供了以下定位元素的方法: 首先看一个HTML文件 test_page.: 通过元素的 id 来完成username输入框

    2024年02月02日
    浏览(70)
  • selenium不定位元素直接使用键盘操作(如弹框操作)

    今天在使用selenium进行定位时,发现直接定位不了chrome的弹框,如这种弹框: 使用的是下面这行代码 运行报错,说是没有 alert windown。。。。 啊?难道chrome的弹框不是用alert写的?emmm……还真是,现在很少使用alert这种原生弹框了,多多少少都会自己封装下,然后就……全网

    2024年02月08日
    浏览(33)
  • selenium自动化:定位到的元素本身有值,但是打印出来的文本值为空。【已解决】

    问题描述: 部分代码段如下:  元素定位是存在文本的【4174】 结果运行代码 输出为空 解决方法: 1. 判断元素是否被隐藏  print ( driver.find_element(xxxx).is_displayed() ) 若返回值为False或者空白,那就说明原因被隐藏了 2. 用get_attribute()方法获取 driver.find_element(xxxx).get_attribute(“

    2024年02月13日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包