『心善渊』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)示例: 页面中的 ...
随机推荐
- 事后分析$\alpha$
项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求 事后分析 我们在这个课程的目标是 提升团队管理及合作能力,开发一项满意的工程项目 这个作业在哪个具体方面帮助我们实现目标 组织组员 ...
- SE_Work2_交点个数
项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求:求交点个数 个人项目作业 班级:005 Sample GitHub地址 IntersectProject 一.PSP估算 在开始实 ...
- Django 请求和响应 request return
request.method 请求方法 request.get get请求信息 request.post post请求信息 request.path 请求路径 方法: requset.get_fu ...
- NumPy之:ndarray中的函数
NumPy之:ndarray中的函数 目录 简介 简单函数 矢量化数组运算 条件逻辑表达式 统计方法 布尔数组 排序 文件 线性代数 随机数 简介 在NumPy中,多维数组除了基本的算数运算之外,还内 ...
- 利用rsync备份生产应用(一)
rsync简单介绍 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的"Rsync算法"来 ...
- Linux——定时清空日志内容和删除日志文件
前言 最近在做性能压测试,会生成大量的日志,导致后续越压越慢,最终磁盘空间占满之类的问题.老是要手动删除日志文件,为避免此类问题发生,编写一个Linux日志定时清理的脚本,一劳永逸. 1.shell脚 ...
- dmesg -w 查看硬件参数
dmesg -w 查看硬件参数 14,笔记本硬件问题,使用dmesg -w可以看到,内核不断受到硬件过来的热插拔信号
- 运维常用shell脚本二(压缩文件、过滤不需要的文件、检测进程)
一.压缩指定目录下的文件并删除原文件 #!/bin/bashZIP_DAY=7 function zip { local dir=$1 if [ -d $dir ];then local file_n ...
- PID基础
经常有人会问到PID的用法,今天小编在这里例举温度控制中的PID部分,希望能够把PID的具体应用说明白. 先说几个名词: 1.直接计算法和增量算法:这里的所谓增量算法就是相对于标准算法的相邻两次运算之 ...
- 继承(extends), 多态 , 抽象(abstract)接口() 易混难点解析
特性 java是单继承的,一个类直接继承的父类只能有唯一的一个 java中父类可以有多个子类 Object是所有类的父类,一个类没有父类则默认继承Object; 继承中的重写 子类重写方法访问权限不能 ...