『心善渊』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)示例: 页面中的 ...
随机推荐
- CSS中margin负值巧布局
margin负值实现细边框 我们先准备五个div盒子,并设置好浮动和2px的实线黑色边框,看看效果 中间的边框线挨在了一起致使边框变粗成了4px,这时使用margin负值就可以解决这个问题 <s ...
- Davinci 可视化系统部署安装及简单使用
Davinci 是一个目前比较热门的国内开源BI系统,功能比较完善,各种可视化效果也挺不错.主要获取数据的方式是通过编写SQL 创建数据视图来展示各种图表的. Davinci面向业务人员/数据工程师/ ...
- [PTA]7-3 逆序的三位数 (10分)
要求: 程序每次读入一个正3位数,然后输出按位逆序的数字.注意:当输入的数字含有结尾的0时,输出不应带有前导的0.比如输入700,输出应该是7. 正确思路: 拆分字符串后拼接成整数 1 #includ ...
- 054.Python之Ubuntu安装Pycharm
在学习Django的时候,开始使用的是centos,但是在做的时候,有一个错误,换一个ubuntu环境,安装一个pycharm进行学习开发 1. 下载PyCharm安装包 进入官网下载包 下载后 2. ...
- Linux进阶之RAID磁盘阵列、系统启动及dd命令
本节内容 1. 磁盘阵列 RAID0: 条带卷 2+ 100% 读写速度快,不容错 RAID1: 镜像卷 2 50% 读写速度慢,容错 RAID5: 奇偶校验条带卷 3 读写速度快,容错 ...
- mysql基础之帮助信息
在mysql中获取帮助 1.当连接到mysql数据库以后,使用help命令或者\?表示获取帮助信息: MariaDB [ren]> help General information about ...
- 按时按登录IP记录Linux所有用户操作日志的方法
背景:Linux用户操作记录一般通过命令history来查看历史记录,但是如果因为某人误操作了删除了重要的数据,这种情况下history命令就不会有什么作用了.以下方法可以实现通过记录登陆IP地址和所 ...
- 图解 Redis | 不就是 AOF 持久化嘛
AOF 日志 试想一下,如果 Redis 每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里,然后重启 Redis 的时候,先去读取这个文件里的命令,并且执行它,这不就相当于恢复了缓存数据了 ...
- Linux C 文件IO
文件IO 2021-05-31 12:46:14 星期一 目录 文件IO 基础IO open 错误 creat read 一个例子 write close lseek 文件空洞 unlink删除 io ...
- [leetcode] 208. 实现 Trie (前缀树)(Java)
208. 实现 Trie (前缀树) 实现Trie树,网上教程一大堆,没啥可说的 public class Trie { private class Node { private int dumpli ...