我们还可以通过Seleniun测试框架中的By类,来实现页面中的元素定位。

1、使用By定位的前提

需要导入By类:

  1. from selenium.webdriver.common.by import By

2、By定位的方法

  1. # 1. 通过元素的id属性进行定位。
  2. find_element(By.ID, "id属性值")
  3. # 2. 通过元素的name属性进行定位。
  4. find_element(By.NAME, "name属性值")
  5. # 3. 通过元素的class属性进行定位。
  6. find_element(By.CLASS_NAME, "class属性值")
  7. # 4.通过元素标签进行定位。
  8. find_element(By.TAG_NAME, "标签名")
  9. # 5. 通过超链接中全部文字定位超链接。
  10. find_element(By.LINK_TEXT, "完整超链接文本")
  11. # 6. 通过超链接中部分连续文字定位超链接。
  12. find_element(By.PARTIAL_LINK_TEXT, "部分超链接文本")
  13. # 7. 通过XPath定位元素。
  14. find_element(By.XPATH, "XPath路径表达式")
  15. # 8. 通过css选择器定位元素。
  16. find_element(By.CSS_SELECTOR, "css选择器定位策略")

By定位与8种基本定位方法类比

基本定位方法 等同于By定位
by_id find_element(By.ID," ") or ("id"," ")
by_name find_element(By.NAME," ") or ("name", " ")
by_class_name find_element(By.CLASS_NAME," ") or ("class name", " ")
by_tag_name find_element(By.TAG_NAME," ") or ("tag name", " ")
by_link_text find_element(By.LINK_TEXT," ") or ("link text", " ")
by_partial_link_text find_element(By.PARTIAL_LINK_TEXT," ") or ("partial link text", " ")
by_xpath find_element(By.XPATH," ") or ("xpath", " ")
by_css_selector find_element(By.CSS_SELECTOR," ") or ("css selector", " ")

这种方式只要统一写find_element(by_***,"字符串")就好,也很方便。看个人习惯使用。

3、By定位的使用

页面代码片段如下

  1. <!DOCTYPE html>
  2. <html lang="zh-cn">
  3. <body>
  4. <div id="zc">
  5. <legend>注册用户A</legend>
  6. <p id="p1">
  7. <label for="userA">账号A</label>
  8. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  9. </p>
  10. <p>
  11. <label for="password">密码A</label>
  12. <input type="password" name="passwordA" id="passwordA" placeholder="密码A" value="">
  13. </p>
  14. <p><a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a></p>
  15. <input type="emailA" name="emailA" id="emailA" placeholder="电子邮箱A" value="">
  16. </div>
  17. </body>
  18. </html>

脚本代码

  1. # 1.导入selenium
  2. from selenium import webdriver
  3. from time import sleep
  4. from selenium.webdriver.common.by import By
  5. import os
  6. # 2.打开浏览器
  7. driver = webdriver.Chrome()
  8. # 3.打开页面
  9. url = "file:///" + os.path.abspath("./1.html")
  10. driver.get(url)
  11. sleep(2)
  12. # 4.定位目标元素
  13. # 4.1 通过id属性定位页面中账号A输入框
  14. # 写法一
  15. element_id_1 = driver.find_element(By.ID, "userA")
  16. print(element_id_1.get_attribute("outerHTML"))
  17. # 写法二
  18. element_id_2 = driver.find_element("id", "userA")
  19. print(element_id_2.get_attribute("outerHTML"))
  20. # 4.2 通过name属性定位页面中账号A输入框
  21. # 写法一
  22. element_name_1 = driver.find_element(By.NAME, "userA")
  23. print(element_name_1.get_attribute("outerHTML"))
  24. # 写法二
  25. element_name_2 = driver.find_element("name", "userA")
  26. print(element_name_2.get_attribute("outerHTML"))
  27. # 4.3 通过class属性定位页面中账号A输入框
  28. # 写法一
  29. element_class_1 = driver.find_element(By.CLASS_NAME, "c_uA")
  30. print(element_class_1.get_attribute("outerHTML"))
  31. # 写法二
  32. element_class_2 = driver.find_element("class name", "c_uA")
  33. print(element_class_2.get_attribute("outerHTML"))
  34. # 4.4 通过tag_name定位页面中账号A输入框
  35. # 写法一
  36. element_tag_name_1 = driver.find_element(By.TAG_NAME, "input")
  37. print(element_tag_name_1.get_attribute("outerHTML"))
  38. # 写法二
  39. element_tag_name_2 = driver.find_element("tag name", "input")
  40. print(element_tag_name_2.get_attribute("outerHTML"))
  41. # 4.5 通过link_text定位页面中超链接
  42. # 写法一
  43. element_link_text_1 = driver.find_element(By.LINK_TEXT, "访问 新浪 网站")
  44. print(element_link_text_1.get_attribute("outerHTML"))
  45. # 写法二
  46. element_link_text_2 = driver.find_element("link text", "访问 新浪 网站")
  47. print(element_link_text_2.get_attribute("outerHTML"))
  48. # 4.6 通过partial_link_text定位页面中超链接
  49. # 写法一
  50. element_partial_link_text_1 = driver.find_element(By.PARTIAL_LINK_TEXT, "问 新浪")
  51. print(element_partial_link_text_1.get_attribute("outerHTML"))
  52. # 写法二
  53. element_partial_link_text_2 = driver.find_element("partial link text", "问 新浪")
  54. print(element_partial_link_text_2.get_attribute("outerHTML"))
  55. # 4.7 通过XPath定位页面中账号A输入框
  56. # 写法一
  57. element_xpath_1 = driver.find_element(By.XPATH, "//input[@id='userA']")
  58. print(element_xpath_1.get_attribute("outerHTML"))
  59. # 写法二
  60. element_xpath_1 = driver.find_element("xpath", "//input[@id='userA']")
  61. print(element_xpath_1.get_attribute("outerHTML"))
  62. # 4.8 通过css_selector定位页面中账号A输入框
  63. # 写法一
  64. element_css_selector_1 = driver.find_element(By.CSS_SELECTOR, "input#userA")
  65. print(element_css_selector_1.get_attribute("outerHTML"))
  66. # 写法二
  67. element_css_selector_2 = driver.find_element("css selector", ".c_uA")
  68. print(element_css_selector_2.get_attribute("outerHTML"))
  69. # 5.关闭浏览器
  70. driver.quit()
  71. """
  72. 输出结果:
  73. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  74. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  75. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  76. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  77. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  78. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  79. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  80. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  81. <a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a>
  82. <a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a>
  83. <a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a>
  84. <a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a>
  85. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  86. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  87. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  88. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  89. """

4、复数形式的示例

(1)语法

同单数差不多,就是find_element换成了find_elements,结果会返回一个元素列表结果集<list>

  1. # 1. 通过元素的id属性进行定位。
  2. find_elements(By.ID, "id属性值")
  3. # 2. 通过元素的name属性进行定位。
  4. find_elements(By.NAME, "name属性值")
  5. # 3. 通过元素的class属性进行定位。
  6. find_elements(By.CLASS_NAME, "class属性值")
  7. # 4.通过元素标签进行定位。
  8. find_elements(By.TAG_NAME, "标签名")
  9. # 5. 通过超链接中全部文字定位超链接。
  10. find_elements(By.LINK_TEXT, "完整超链接文本")
  11. # 6. 通过超链接中部分连续文字定位超链接。
  12. find_elements(By.PARTIAL_LINK_TEXT, "部分超链接文本")
  13. # 7. 通过XPath定位元素。
  14. find_elements(By.XPATH, "XPath路径表达式")
  15. # 8. 通过css选择器定位元素。
  16. find_elements(By.CSS_SELECTOR, "css选择器定位策略")

(2)练习

页面代码片段如下

  1. <!DOCTYPE html>
  2. <html lang="zh-cn">
  3. <body>
  4. <div id="zc">
  5. <legend>注册用户A</legend>
  6. <p id="p1">
  7. <label for="userA">账号A</label>
  8. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  9. </p>
  10. <p>
  11. <label for="password">密码A</label>
  12. <input type="password" name="passwordA" id="passwordA" placeholder="密码A" value="">
  13. </p>
  14. <p><a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a></p>
  15. <input type="emailA" name="emailA" id="emailA" placeholder="电子邮箱A" value="">
  16. </div>
  17. </body>
  18. </html>

脚本代码

  1. # 1.导入selenium
  2. from selenium import webdriver
  3. from time import sleep
  4. from selenium.webdriver.common.by import By
  5. import os
  6. # 2.打开浏览器
  7. driver = webdriver.Chrome()
  8. # 3.打开页面
  9. url = "file:///" + os.path.abspath("./1.html")
  10. driver.get(url)
  11. sleep(2)
  12. # 4.定位目标元素
  13. # 4.1 通过id属性定位页面中账号A输入框
  14. # 写法一
  15. element_id_1 = driver.find_elements(By.ID, "userA")
  16. for element in element_id_1:
  17. print(element.get_attribute("outerHTML"))
  18. # 写法二
  19. element_id_2 = driver.find_elements("id", "userA")
  20. for element in element_id_2:
  21. print(element.get_attribute("outerHTML"))
  22. # 5.关闭浏览器
  23. driver.quit()
  24. """
  25. 输出结果:
  26. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  27. <input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
  28. """

『心善渊』Selenium3.0基础 — 9、使用Seleniun中的By类定位元素的更多相关文章

  1. 『心善渊』Selenium3.0基础 — 6、Selenium中使用XPath定位元素

    目录 1.Selenium中使用XPath查找元素 (1)XPath通过id,name,class属性定位 (2)XPath通过标签中的其他属性定位 (3)XPath层级定位 (4)XPath索引定位 ...

  2. 『心善渊』Selenium3.0基础 — 28、unittest中测试套件的使用

    目录 1.测试套件的作用 2.使用测试套件 (1)入门示例 (2)根据不同的条件加载测试用例(了解) (3)常用方式(推荐) 1.测试套件的作用 在我们实际工作,使用unittest框架会有两个问题: ...

  3. 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍

    目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...

  4. 『心善渊』Selenium3.0基础 — 10、使用Seleniun定位页面元素归纳总结(超详细)

    目录 1.Selenium中8种基本元素定位方式 (1)单数形式 (2)复数形式 2.By类定位的8种定位方式 (1)单数形式 (2)复数形式 3.XPath定位总结 (1)基础定位语法 (2)属性定 ...

  5. 『心善渊』Selenium3.0基础 — 11、Selenium对元素常用操作

    目录 1.Selenium对元素常用操作 2.Selenium对元素的其他操作 1.Selenium对元素常用操作 操作 说明 click() 单击元素 send_keys() 模拟输入 clear( ...

  6. 『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件

    目录 (一)对鼠标的操作 1.鼠标事件介绍 2.ActionChains 类鼠标操作的常用方法 3.perform()方法 4.鼠标事件操作步骤 5.示例 (1)右键单击.左键双击 (2)鼠标拖拽动作 ...

  7. 『心善渊』Selenium3.0基础 — 1、Selenium自动化测试框架介绍

    目录 1.Selenium介绍 2.Selenium的特点 3.Selenium版本说明 4.拓展:WebDriver与Selenium RC的区别 5.Webdriver工作原理 1.Seleniu ...

  8. 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解

    目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...

  9. 『心善渊』Selenium3.0基础 — 5、XPath路径表达式详细介绍

    目录 1.XPath介绍 2.什么是XML 3.XML与HTML对比 4.为什么使用XPath定位页面中的元素 5.XPath中节点之间的关系 (1)节点的概念 (2)节点之间的关系类型 6.XPat ...

  10. 『心善渊』Selenium3.0基础 — 13、Selenium操作下拉菜单

    目录 1.使用Selenium中的Select类来处理下拉菜单(推荐) 2.下拉菜单对象的其他操作(了解) 3.通过元素二次定位方式操作下拉菜单(重点) (1)了解元素二次定位 (2)示例: 页面中的 ...

随机推荐

  1. lower_bound和upper_bound的实现

    int lowerBound(int* nums, int numsSize, int target) { //注意left和right的初始值必须是left = 0, right = numsSzi ...

  2. What are CBR, VBV and CPB?

    转自:https://codesequoia.wordpress.com/2010/04/19/what-are-cbr-vbv-and-cpb/ It's common mistake to to ...

  3. CentOS 8 配置 VNC Server

    CentOS 8 配置 VNC Server 2020-12-31 | 标签: centos, vnc 前言 CentOS 8 配置 VNC Server, 使用户可以远程访问,本例介绍安装和配置流程 ...

  4. CentOS6.7系统文本安装-2020

    CentOS6.7系统文本安装 [日期:2016-01-30] 来源:Linux社区  作者:endmoon [字体:大 中 小]   一.选择虚拟机软件 1)VMware Workstation   ...

  5. 使用GitHub绑定域名免费创建自己的博客

    通过GitHub创建一个免费的.有上传网页功能的.可以绑定域名的个人博客,或者网站. 在这之前的必要条件: 1.有自己的域名,能添加CNAME或者A记录 2.注册好了GitHub账号 方法: 1.添加 ...

  6. 删除rpc01

    vim /opt/ltp/runtest/stress.part3 修改/opt/ltp/runtest/stress.part3 删除rpc01: 142 systemctl status gdm ...

  7. Ubuntu 18.04安装 Adob Flash player

    1.Ctrl + Alt + T 打开命令终端,启用Canonical Partners Repository存储库 (最新的Flash插件位于Canonical Partners的存储库中,默认情况 ...

  8. kylin剪枝优化的两种方式

    1.衍生维度. 在kylin中,如果某些维度都属于同一种类型,且数量较多,可以考虑做成衍生维度. 衍生维度就是将一批维度做成一张维度表,只在源表中保留这张表的外键,这样预处理的时候,就只会处理这个外键 ...

  9. Python数学建模-02.数据导入

    数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数据导入 ...

  10. 又卡了~从王者荣耀看Android屏幕刷新机制

    前言 正在带妹子上分的我,团战又卡了,我该怎么向妹子解释?在线等. "卡"的意思 不管是端游还是手游,我们都会时不时遇到"卡"的时候,一般这个卡有两种含义: 掉 ...