首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Selenium元素定位全攻略,让你轻松玩转自动化测试

  • 25-03-08 00:43
  • 3775
  • 10192
blog.csdn.net

一、什么是元素定位

  • 元素定位就是查找HTML元素的过程,操作页面元素之前,首先要对元素进行定位,所以定位是自动化脚本编写的开始。
  • 通常使用find_element或find_elements方法来定位元素(find_element 使用给定的方法定位和查找一个元素;find_elements 使用给定的方法定位和查找所有的元素)

二、Selenium元素定位常用API

1.By_id定位

当所定位的元素具有id属性的时候我们可以通过by_id来定位该元素

例如:打开百度,定位搜索框

搜索框页面源代码:属性id值为kw

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="255" autocomplete="off">
 
  1. '''

  2. 1.学习目标

  3. 必须掌握selenium中元素定位方法,id定位方法

  4. 2.操作步骤(语法)通过元素id属性定位

  5. driver.find_element_by_id(id属性的值)

  6. 3.需求

  7. 在百度页面中使用id属性定位百度输入框

  8. '''

  9. # 1.导入selenium

  10. from selenium import webdriver

  11. from time import sleep

  12. # 2.打开浏览器(获取浏览器对象)

  13. driver = webdriver.Chrome()

  14. # 3.输入网址

  15. url = "http://www.baidu.com"

  16. driver.get(url)

  17. sleep(2)

  18. # 4.元素定位(id定位方法),百度输入框

  19. '''

  20. 注意:

  21. 如果有多个相同属性值的元素,单数形式,定位第一个.

  22. '''

  23. srk = driver.find_element_by_id("kw")

  24. # 打印srk对象

  25. print(srk)

  26. # 查看元素对应的源码

  27. print(srk.get_attribute("outerHTML"))

  28. # 5.关团浏览器

  29. driver.quit()

  30. '''

  31. 输出结果:

  32. (session="6fbad6d63614e1cae6cd346153a7105e",

  33. element="0dd374b6-74ed-4f4c-b610-5c772fd8c366")>

  34. 我们可以看到srk是一个WebElement类型的对象。

  35. 查看元素对应的源码如下:

  36. 说明我们已经把百度首页的输入框获取到了。

  37. '''

复数形式:

 
  1. '''

  2. 学习目标

  3. 复数形式

  4. 复数定位形式:driver.find_elements_XXX

  5. 复数定位,返回的列表类型数据

  6. 遍历列表操作具体元素

  7. '''

  8. # 1.导入selenium

  9. from selenium import webdriver

  10. from time import sleep

  11. # 2.打开浏览器

  12. driver = webdriver.Chrome()

  13. # 3.输入网址

  14. url = "http://www.baidu.com"

  15. driver.get(url)

  16. sleep(2)

  17. # 4.通过by_id复数定位

  18. srk = driver.find_elements_by_id("kw")

  19. # 5.查看返回结果数据类型

  20. print("结果数据类型", type(srk))

  21. print("元素个数", len(srk))

  22. # 6.遍历结果,查看源码

  23. for i in srk:

  24. # 查看元素对应的源码

  25. print(i.get_attribute("outerHTML"))

  26. # 7.关团浏览器

  27. driver.quit()

  28. '''

  29. 结果数据类型

  30. 元素个数 1

  31. '''

异常总结:

异常1:AttributeError:'list' object has no attribute 'get_attribute' :表示定位元素返回的是一个列表格式,原因:使用复数定位方式 find_elements获取的定位

异常2 :NoSuchElementException : 表示元素没找到元素,原因是定位方式出现问题,有一种情况是属性值写错了。

2.by_name 定位

当所定位的元素具有name属性的时候,我们可以通过by_name来定位该元素

如上图中的百度搜索页面,搜索框页面源代码:属性name值为wd

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

使用name属性定位百度搜索框

 
  1. '''

  2. 1.学习目标:

  3. 必须掌握selenium的元素定位方法by_name

  4. 2.语法

  5. name定位

  6. driver.find_element_by_name(name属性的值)

  7. 3.需求

  8. 使用name属性定位百度搜索框

  9. 4.总结

  10. 当元素中有name属性时才能使用上述定位方法

  11. '''

  12. # 1.导入selenium

  13. from selenium import webdriver

  14. from time import sleep

  15. # 2.打开浏览器(获取浏览器对象)

  16. driver = webdriver.Chrome()

  17. # 3.输入网址

  18. url = "http://www.baidu.com"

  19. driver.get(url)

  20. sleep(2)

  21. # 4. 使用name定位百度搜索框

  22. '''

  23. 注意:

  24. 如果有多个相同属性值的元素,单数形式,定位第一个.

  25. '''

  26. srk = driver.find_element_by_name("wd")

  27. # 打印srk对象

  28. print(srk)

  29. # 打印定位元素所在行的源码

  30. print(srk.get_attribute("outerHTML"))

  31. # 5.关闭浏览器

  32. driver.quit()

  33. '''

  34. 输出结果:

  35. (session="3149d334336f0eab9e4d8d394e4efd72",

  36. element="0.1359081202533734-1")>

  37. '''

复数形式:

 
  1. '''

  2. 学习目标

  3. 复数形式

  4. 复数定位形式:driver.find_elements_XXX

  5. 复数定位,返回的列表类型数据

  6. 遍历列表操作具体元素

  7. '''

  8. # 1.导入selenium

  9. from selenium import webdriver

  10. from time import sleep

  11. # 2.打开浏览器

  12. driver = webdriver.Chrome()

  13. # 3.输入网址

  14. url = "http://www.baidu.com"

  15. driver.get(url)

  16. sleep(2)

  17. # 4.通过by_id复数定位

  18. srk = driver.find_elements_by_name("wd")

  19. # 5.查看返回结果数据类型

  20. print("结果数据类型", type(srk))

  21. print("元素个数", len(srk))

  22. # 6.遍历结果,查看源码

  23. for i in srk:

  24. # 查看元素对应的源码

  25. print(i.get_attribute("outerHTML"))

  26. # 7.关团浏览器

  27. driver.quit()

  28. '''

  29. 结果数据类型

  30. 元素个数 1

  31. '''

3.by_class_name 定位

当所定位的元素具有class属性的时候,我们可以通过by_class_name来定位该元素

搜索框页面源代码:属性classname值为s_ipt

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="255" autocomplete="off">

使用class属性定位百度搜索框

 
  1. '''

  2. 1.学习目标:

  3. 必须掌握selenium的元素定位方法by_class_name

  4. 2.语法

  5. classname定位

  6. driver.find_element_by_class_name(class属性值)

  7. 3.需求

  8. 使用class属性定位百度搜索框

  9. 4.总结

  10. 当元素中有class属性时才能使用上述定位方法

  11. '''

  12. # 1.导入selenium

  13. from selenium import webdriver

  14. from time import sleep

  15. # 2.打开浏览器(获取浏览器对象)

  16. driver = webdriver.Chrome()

  17. # 3.输入网址

  18. url = "http://www.baidu.com"

  19. driver.get(url)

  20. sleep(2)

  21. # 4. 使用name定位百度搜索框

  22. '''

  23. 注意:

  24. 如果有多个相同属性值的元素,单数形式,定位第一个.

  25. '''

  26. srk = driver.find_element_by_class_name("s_ipt")

  27. # 打印srk对象

  28. print(srk)

  29. # 查看元素对应的源码

  30. print(srk.get_attribute("outerHTML"))

  31. # 5.关闭浏览器

  32. driver.quit()

  33. '''

  34. 输出结果:

  35. (session="e4f97a48e7f113e681950b62c7789966",

  36. element="0.5782514739919584-1")>

  37. '''

复数形式:

 
  1. '''

  2. 学习目标

  3. 复数形式

  4. 复数定位形式:driver.find_elements_XXX

  5. 复数定位,返回的列表类型数据

  6. 遍历列表操作具体元素

  7. '''

  8. # 1.导入selenium

  9. from selenium import webdriver

  10. from time import sleep

  11. # 2.打开浏览器

  12. driver = webdriver.Chrome()

  13. # 3.输入网址

  14. url = "http://www.baidu.com"

  15. driver.get(url)

  16. sleep(2)

  17. # 4.通过by_id复数定位

  18. srk = driver.find_elements_by_class_name("s_ipt")

  19. # 5.查看返回结果数据类型

  20. print("结果数据类型", type(srk))

  21. print("元素个数", len(srk))

  22. # 6.遍历结果,查看源码

  23. for i in srk:

  24. # 查看元素对应的源码

  25. print(i.get_attribute("outerHTML"))

  26. # 7.关团浏览器

  27. driver.quit()

  28. '''

  29. 结果数据类型

  30. 元素个数 1

  31. '''

4.by_tag_name 定位

by_tag_name方法可以通过元素的标签名来查找元素。由于搜索到的标签名通常不 止一个,所以一般结合使用find_elements方法来使用

假设页面中有一个button按钮

 
  1. '''

  2. 1.学习目标:

  3. 必须掌握selenium中tag_name定位方法

  4. 2.语法

  5. driver.find_element_by_tag_name(标签名) # 单数形式

  6. driver.find_elements_by_tag_name(标签名) # 定位一组标签名相同的元素

  7. 3.需求

  8. 在页面中,使用tag_name对按钮注册用户A定位

  9. '''

  10. # 1.导入selenium

  11. from selenium import webdriver

  12. from time import sleep

  13. import os

  14. # 2.打开浏览器(获取浏览器对象)

  15. driver = webdriver.Chrome()

  16. # 3.打开注册A页面

  17. url = "file:///" + os.path.abspath("./练习页面/注册A.html")

  18. driver.get(url)

  19. sleep(2)

  20. # 4.使用tag_name定位按钮

  21. '''

  22. 注意:

  23. 如果有多个相同标签的元素,单数形式,定位第一个.

  24. '''

  25. button = driver.find_element_by_tag_name("input")

  26. print(button.get_attribute("outerHTML"))

  27. # 5.关闭浏览器

  28. sleep(2)

  29. driver.quit()

  30. '''

  31. 输出结果:

  32. '''

复数形式:

 
  1. '''

  2. 1.学习目标:

  3. 必须掌握selenium中tag_name定位方法

  4. 2.语法

  5. driver.find_element_by_tag_name(标签名) # 单数形式

  6. driver.find_elements_by_tag_name(标签名) # 定位一组标签名相同的元素

  7. 3.需求

  8. 在页面中,使用tag_name复数形式定位 input标签

  9. '''

  10. # 1.导入selenium

  11. from selenium import webdriver

  12. from time import sleep

  13. import os

  14. # 2.打开浏览器

  15. driver = webdriver.Chrome()

  16. # 3.打开注册A页面

  17. url = "file:///" + os.path.abspath("./练习页面/注册A.html")

  18. driver.get(url)

  19. sleep(2)

  20. # 4.使用tag_name复数形式定位 input标签

  21. input_elements = driver.find_elements_by_tag_name("input")

  22. # 查看结果类型

  23. print(type(input_elements))

  24. print(len(input_elements))

  25. # 5.遍历列表打印每个元素的源码

  26. for element in input_elements:

  27. print(element.get_attribute("outerHTML"))

  28. # 6.关闭浏览器

  29. driver.quit()

  30. '''

  31. 输出结果:

  32. 16

  33. ......等等

  34. '''

tag_name定位:

单数形式
当页面中如果定位的标签是唯一的,可以直接使用tag_name方法定位
如果所定位的标签在页面中的索引位置是第一个,也可以用tag_name方法定位

复数形式
复数定位形式:driver.find_elements_XXX
复数定位,返回的列表类型数据
遍历列表操作具体元素

5.by_link_text 定位

by_link_text通过超文本链接上的文字信息来定位元素,这种方式一般专门用于定位页面上的超文本链接

例如打开百度首页,定位点击超链接地图

<a class="mnav" name="tj_trmap" href="http://map.baidu.com">地图</a>

使用link_text定位百度首页地图链接

 
  1. '''

  2. 1.学习目标:

  3. 必须掌握selenium中超链接的定位方法

  4. 2.语法

  5. link_text # 需要链接的全部文本

  6. driver.find_element_by_link_text(全部文本)

  7. 3.需求

  8. 在页面中,使用定位连接的方法,访问百度网站,定位点击超链接地图。

  9. '''

  10. # 1.导入selenium

  11. from selenium import webdriver

  12. from time import sleep

  13. import os

  14. # 2.打开浏览器

  15. driver = webdriver.Chrome()

  16. # 3.打开页面

  17. url = "http://www.baidu.com"

  18. driver.get(url)

  19. sleep(2)

  20. # 4.使用link_text定位

  21. '''

  22. 注意:

  23. 连接的全部文本,表示标签中的全部内容,有空格也要算。

  24. 如果有相同部分文本的元素,单数形式,定位第一个。

  25. '''

  26. linkText = driver.find_element_by_link_text("地图")

  27. print(linkText.get_attribute("outerHTML"))

  28. # 5.关闭浏览器

  29. driver.quit()

  30. '''

  31. 输出结果:

  32. 地图

  33. '''

复数形式:

 
  1. # 定位一组标超链接文本全部内容相同的元素,很少用到。# 1.导入selenium

  2. from selenium import webdriver

  3. from time import sleep

  4. # 2.打开浏览器

  5. driver = webdriver.Chrome()

  6. # 3.打开页面

  7. url = "http://www.baidu.com"

  8. driver.get(url)

  9. sleep(2)

  10. # 4.使用link_text定位

  11. '''

  12. 注意:

  13. 连接的全部文本,表示标签中的全部内容,有空格也要写。

  14. '''

  15. linkText = driver.find_elements_by_link_text("地图")

  16. # 5.遍历列表打印每个元素的源码

  17. for element in linkText:

  18. print(element.get_attribute("outerHTML"))

  19. # 6.关闭浏览器

  20. driver.quit()

  21. '''

  22. 输出结果:

  23. 地图

  24. '''

6.by_partial_link_text 定位

当你不能准确知道超链接上的文本信息或者只想通过一些关键字进行匹配时,可以使 用by_partial_link_text这个方法来通过部分链接文字进行匹配

例如打开百度首页,定位点击超链接

<a href="https://www.hao123.com" target="_blank" class="mnav c-font-normal c-color-t">hao123</a>

使用partial_link_text方法定位百度首页链接

 
  1. '''

  2. 1.学习目标:

  3. 必须掌握selenium中超链接的定位方法

  4. 2.语法

  5. partial_link_text # 需要连接部分文本

  6. driver.find_element_by_partial_link_text(部分文本)

  7. 部分文本必须是连续的文字(中可包含空格)

  8. 3.需求

  9. 在页面中,使用定位连接的方法,访问百度网站,定位点击超链接。

  10. '''

  11. # 1.导入selenium

  12. from selenium import webdriver

  13. from time import sleep

  14. # 2.打开浏览器

  15. driver = webdriver.Chrome()

  16. # 3.打开页面

  17. url = "http://www.baidu.com"

  18. driver.get(url)

  19. sleep(2)

  20. # 4.使用by_partial_link_text定位

  21. '''

  22. 注意:

  23. 连接的部分文本,表示标签中的连续的部分内容,之中有空格也要算。

  24. 如果有相同部分文本的元素,单数形式,定位第一个。

  25. '''

  26. pLinkText = driver.find_element_by_partial_link_text("ao1")

  27. print(pLinkText.get_attribute("outerHTML"))

  28. # 6.关闭浏览器

  29. sleep(2)

  30. driver.quit()

  31. '''

  32. 输出结果:

  33. hao123

  34. '''

复数形式:

 
  1. # 定位一组标超链接文本目标内容相同的元素,很少用到。# 1.导入selenium

  2. from selenium import webdriver

  3. from time import sleep

  4. # 2.打开浏览器

  5. driver = webdriver.Chrome()

  6. # 3.打开页面

  7. url = "http://www.baidu.com"

  8. driver.get(url)

  9. sleep(2)

  10. # 4.使用by_partial_link_text定位

  11. '''

  12. 注意:

  13. 连接的部分文本,表示标签中的连续的部分内容,之中有空格也要算。

  14. '''

  15. pLinkText = driver.find_elements_by_partial_link_text("ao1")

  16. # 5.遍历列表打印每个元素的源码

  17. for element in pLinkText:

  18. print(element.get_attribute("outerHTML"))

  19. # 6.关闭浏览器

  20. driver.quit()

  21. '''

  22. 输出结果:

  23. hao123

  24. '''

以上就是selenium的基础元素定位,下次讲解xpath和css定位方法,感兴趣的可以关注下。

 

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

程序员雷叔
微信公众号
免费领取测试资源、大厂面试真题、职业规划
注:本文转载自blog.csdn.net的程序员小雷的文章"https://blog.csdn.net/OKCRoss/article/details/144584912"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

127
测试
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top