『心善渊』Selenium3.0基础 — 9、使用Seleniun中的By类定位元素
我们还可以通过Seleniun测试框架中的By类,来实现页面中的元素定位。
1、使用By定位的前提
需要导入By类:
from selenium.webdriver.common.by import By
2、By定位的方法
# 1. 通过元素的id属性进行定位。
find_element(By.ID, "id属性值")
# 2. 通过元素的name属性进行定位。
find_element(By.NAME, "name属性值")
# 3. 通过元素的class属性进行定位。
find_element(By.CLASS_NAME, "class属性值")
# 4.通过元素标签进行定位。
find_element(By.TAG_NAME, "标签名")
# 5. 通过超链接中全部文字定位超链接。
find_element(By.LINK_TEXT, "完整超链接文本")
# 6. 通过超链接中部分连续文字定位超链接。
find_element(By.PARTIAL_LINK_TEXT, "部分超链接文本")
# 7. 通过XPath定位元素。
find_element(By.XPATH, "XPath路径表达式")
# 8. 通过css选择器定位元素。
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定位的使用
页面代码片段如下:
<!DOCTYPE html>
<html lang="zh-cn">
<body>
<div id="zc">
<legend>注册用户A</legend>
<p id="p1">
<label for="userA">账号A</label>
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
</p>
<p>
<label for="password">密码A</label>
<input type="password" name="passwordA" id="passwordA" placeholder="密码A" value="">
</p>
<p><a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a></p>
<input type="emailA" name="emailA" id="emailA" placeholder="电子邮箱A" value="">
</div>
</body>
</html>
脚本代码:
# 1.导入selenium
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
import os
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开页面
url = "file:///" + os.path.abspath("./1.html")
driver.get(url)
sleep(2)
# 4.定位目标元素
# 4.1 通过id属性定位页面中账号A输入框
# 写法一
element_id_1 = driver.find_element(By.ID, "userA")
print(element_id_1.get_attribute("outerHTML"))
# 写法二
element_id_2 = driver.find_element("id", "userA")
print(element_id_2.get_attribute("outerHTML"))
# 4.2 通过name属性定位页面中账号A输入框
# 写法一
element_name_1 = driver.find_element(By.NAME, "userA")
print(element_name_1.get_attribute("outerHTML"))
# 写法二
element_name_2 = driver.find_element("name", "userA")
print(element_name_2.get_attribute("outerHTML"))
# 4.3 通过class属性定位页面中账号A输入框
# 写法一
element_class_1 = driver.find_element(By.CLASS_NAME, "c_uA")
print(element_class_1.get_attribute("outerHTML"))
# 写法二
element_class_2 = driver.find_element("class name", "c_uA")
print(element_class_2.get_attribute("outerHTML"))
# 4.4 通过tag_name定位页面中账号A输入框
# 写法一
element_tag_name_1 = driver.find_element(By.TAG_NAME, "input")
print(element_tag_name_1.get_attribute("outerHTML"))
# 写法二
element_tag_name_2 = driver.find_element("tag name", "input")
print(element_tag_name_2.get_attribute("outerHTML"))
# 4.5 通过link_text定位页面中超链接
# 写法一
element_link_text_1 = driver.find_element(By.LINK_TEXT, "访问 新浪 网站")
print(element_link_text_1.get_attribute("outerHTML"))
# 写法二
element_link_text_2 = driver.find_element("link text", "访问 新浪 网站")
print(element_link_text_2.get_attribute("outerHTML"))
# 4.6 通过partial_link_text定位页面中超链接
# 写法一
element_partial_link_text_1 = driver.find_element(By.PARTIAL_LINK_TEXT, "问 新浪")
print(element_partial_link_text_1.get_attribute("outerHTML"))
# 写法二
element_partial_link_text_2 = driver.find_element("partial link text", "问 新浪")
print(element_partial_link_text_2.get_attribute("outerHTML"))
# 4.7 通过XPath定位页面中账号A输入框
# 写法一
element_xpath_1 = driver.find_element(By.XPATH, "//input[@id='userA']")
print(element_xpath_1.get_attribute("outerHTML"))
# 写法二
element_xpath_1 = driver.find_element("xpath", "//input[@id='userA']")
print(element_xpath_1.get_attribute("outerHTML"))
# 4.8 通过css_selector定位页面中账号A输入框
# 写法一
element_css_selector_1 = driver.find_element(By.CSS_SELECTOR, "input#userA")
print(element_css_selector_1.get_attribute("outerHTML"))
# 写法二
element_css_selector_2 = driver.find_element("css selector", ".c_uA")
print(element_css_selector_2.get_attribute("outerHTML"))
# 5.关闭浏览器
driver.quit()
"""
输出结果:
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
<a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a>
<a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a>
<a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a>
<a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a>
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
"""
4、复数形式的示例
(1)语法:
同单数差不多,就是find_element换成了find_elements,结果会返回一个元素列表结果集<list>。
# 1. 通过元素的id属性进行定位。
find_elements(By.ID, "id属性值")
# 2. 通过元素的name属性进行定位。
find_elements(By.NAME, "name属性值")
# 3. 通过元素的class属性进行定位。
find_elements(By.CLASS_NAME, "class属性值")
# 4.通过元素标签进行定位。
find_elements(By.TAG_NAME, "标签名")
# 5. 通过超链接中全部文字定位超链接。
find_elements(By.LINK_TEXT, "完整超链接文本")
# 6. 通过超链接中部分连续文字定位超链接。
find_elements(By.PARTIAL_LINK_TEXT, "部分超链接文本")
# 7. 通过XPath定位元素。
find_elements(By.XPATH, "XPath路径表达式")
# 8. 通过css选择器定位元素。
find_elements(By.CSS_SELECTOR, "css选择器定位策略")
(2)练习:
页面代码片段如下:
<!DOCTYPE html>
<html lang="zh-cn">
<body>
<div id="zc">
<legend>注册用户A</legend>
<p id="p1">
<label for="userA">账号A</label>
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
</p>
<p>
<label for="password">密码A</label>
<input type="password" name="passwordA" id="passwordA" placeholder="密码A" value="">
</p>
<p><a href="http://www.sina.com.cn" id="fwA">访问 新浪 网站</a></p>
<input type="emailA" name="emailA" id="emailA" placeholder="电子邮箱A" value="">
</div>
</body>
</html>
脚本代码:
# 1.导入selenium
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
import os
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开页面
url = "file:///" + os.path.abspath("./1.html")
driver.get(url)
sleep(2)
# 4.定位目标元素
# 4.1 通过id属性定位页面中账号A输入框
# 写法一
element_id_1 = driver.find_elements(By.ID, "userA")
for element in element_id_1:
print(element.get_attribute("outerHTML"))
# 写法二
element_id_2 = driver.find_elements("id", "userA")
for element in element_id_2:
print(element.get_attribute("outerHTML"))
# 5.关闭浏览器
driver.quit()
"""
输出结果:
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
<input type="textA" name="userA" id="userA" class="c_uA" placeholder="账号A" required="" value="">
"""
『心善渊』Selenium3.0基础 — 9、使用Seleniun中的By类定位元素的更多相关文章
- 『心善渊』Selenium3.0基础 — 6、Selenium中使用XPath定位元素
目录 1.Selenium中使用XPath查找元素 (1)XPath通过id,name,class属性定位 (2)XPath通过标签中的其他属性定位 (3)XPath层级定位 (4)XPath索引定位 ...
- 『心善渊』Selenium3.0基础 — 28、unittest中测试套件的使用
目录 1.测试套件的作用 2.使用测试套件 (1)入门示例 (2)根据不同的条件加载测试用例(了解) (3)常用方式(推荐) 1.测试套件的作用 在我们实际工作,使用unittest框架会有两个问题: ...
- 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍
目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...
- 『心善渊』Selenium3.0基础 — 10、使用Seleniun定位页面元素归纳总结(超详细)
目录 1.Selenium中8种基本元素定位方式 (1)单数形式 (2)复数形式 2.By类定位的8种定位方式 (1)单数形式 (2)复数形式 3.XPath定位总结 (1)基础定位语法 (2)属性定 ...
- 『心善渊』Selenium3.0基础 — 11、Selenium对元素常用操作
目录 1.Selenium对元素常用操作 2.Selenium对元素的其他操作 1.Selenium对元素常用操作 操作 说明 click() 单击元素 send_keys() 模拟输入 clear( ...
- 『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件
目录 (一)对鼠标的操作 1.鼠标事件介绍 2.ActionChains 类鼠标操作的常用方法 3.perform()方法 4.鼠标事件操作步骤 5.示例 (1)右键单击.左键双击 (2)鼠标拖拽动作 ...
- 『心善渊』Selenium3.0基础 — 1、Selenium自动化测试框架介绍
目录 1.Selenium介绍 2.Selenium的特点 3.Selenium版本说明 4.拓展:WebDriver与Selenium RC的区别 5.Webdriver工作原理 1.Seleniu ...
- 『心善渊』Selenium3.0基础 — 4、Selenium基础元素定位详解
目录 1.什么是元素定位 2.Selenium元素定位常用API (1)By_id 定位 (2)by_name 定位 (3)by_class_name 定位 (4)by_tag_name 定位 (5) ...
- 『心善渊』Selenium3.0基础 — 5、XPath路径表达式详细介绍
目录 1.XPath介绍 2.什么是XML 3.XML与HTML对比 4.为什么使用XPath定位页面中的元素 5.XPath中节点之间的关系 (1)节点的概念 (2)节点之间的关系类型 6.XPat ...
- 『心善渊』Selenium3.0基础 — 13、Selenium操作下拉菜单
目录 1.使用Selenium中的Select类来处理下拉菜单(推荐) 2.下拉菜单对象的其他操作(了解) 3.通过元素二次定位方式操作下拉菜单(重点) (1)了解元素二次定位 (2)示例: 页面中的 ...
随机推荐
- redis的数据结构、使用场景、持久化方式以及常见面试问题
一.redis中的数据结构 1.字符串(String) SET key value //存入字符串键值对 MSET key value[key value...] //批量存储字符串键值对 SETNX ...
- SpringBoot系列——事件发布与监听
前言 日常开发中,我们经常会碰到这样的业务场景:用户注册,注册成功后需要发送邮箱.短信提示用户,通常我们都是这样写: /** * 用户注册 */ @GetMapping("/userRegi ...
- .Net平台的GC垃圾回收
一.先了解下必备的知识前提 内存中的托管与非托管,可简单理解为: 托管:可借助GC从内存中释放的数据对象(以下要描述的内容点) 非托管:必须手工借助Dispose释放资源(实现自IDisposable ...
- 【MySQL】MySQL-front等客户端连接MySQL_8.0等失败的解决办法
ALTER USER 'root'@'localhost' IDENTIFIED BY '新的密码' PASSWORD EXPIRE NEVER; ALTER USER 'root'@'localho ...
- jmeter完成一个简单的性能测试(jp@gc - PerfMon Metrics Collector的运用)
场景:公司项目解耦,在项目前期对新的架构进行简单的性能测试 工具:jmeter 1.大致结构如下: 1800秒(半个小时)内持续产生20000的线程 创建了聚合报告,主要是查看服务器响应结果以及相应时 ...
- Ubuntu 16.04搭建php5.6 Web服务器环境
Ubuntu 16.04默认安装php7.0环境,但是php7目前兼容性并不是很好,如果自行安装php5需要清除php7的已安装包,否则会报错. 移除默认及已安装的PHP包 sudo dpkg -l ...
- python实现给字典添加条目的方法
具体实现方法如下: def addWord(theIndex,word,pagenumber): theIndex.setdefault(word, [ ]).append(pagenumber)#存 ...
- 【odoo14】【用户侧】权限配置
以下内容仅适用于odoo的客户,不适用于开发人员. 下文介绍中涉及的概念及UI均是在odoo14社区版中进行. 目录 一. odoo中的对象 二. 权限控制 2.1 实现原理 2.2 UI方式实现权限 ...
- win10家庭中文版CUDA+CUDNN+显卡GPU使用tensorflow-gpu训练模型安装过程(精华帖汇总+重新修改多次复现)
查看安装包 pip list 本帖提供操作过程,具体操作网上有好多了,不赘述.红色字体为后来复现出现的问题以及批注 题外话: (1)python 的环境尽量保持干净,尽量单一,否则容易把自己搞晕,不知 ...
- TensorFlow用法
TensorFlow用法 什么是TensorFlow TensorFlow是一个开源软件库,用于使用数据流图进行数值计算.图中的节点表示数学运算,而图的边缘表示流动的多维数据数组(张量).这种灵活的体 ...