自动化(二)
一、元素定位
目标:掌握id、name、class_name、tag_name、link_text、partial_link_text、XPath、CSS八种定位方式
为什么要掌握元素定位?
让程序操作指定元素,就必须线找到此元素
1)如何元素定位
谷歌浏览器,按F12出现右侧的检查栏,点击鼠标,然后再点击页面中的元素,则可以找到该元素的组成代码。
定位元素时,依赖于以下几点:
1、标签名
2、属性
3、层级
4、路径
二、元素定位方式
Selenium提供了八种定位元素方式
1、id
2、name
3、class_name
4、tag_name
5、link_text
6、partial_link_text
7、XPath
8、CSS
1)id定位
案例
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器对象
driver = webdriver.Chrome()
# 打开url
# 在路径前添加r也可
# r是修饰的字符串,如果字符串中有转义字符,不进行转义使用
# url = r"E:\课程文件\暑期学习\html\day02\03表单.html"
url = "E:\\课程文件\\暑期学习\\html\\day02\\03表单.html"
driver.get(url)
# 查找用户名
username = driver.find_element_by_id("yhm")
# 查找密码元素
pwd = driver.find_element_by_id("mm")
# 用户名输入admin 输入方法:send_keys("内容")
username.send_keys("admin")
# 密码输入123456 输入方法:send_keys("内容")
pwd.send_keys("123456")
# 暂停3s
sleep(5)
# 退出浏览器
driver.quit()
2)name定位
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器对象
driver = webdriver.Chrome()
# 打开url
# 在路径前添加r也可
# r是修饰的字符串,如果字符串中有转义字符,不进行转义使用
# url = r"E:\课程文件\暑期学习\html\day02\03表单.html"
url = "E:\\课程文件\\暑期学习\\html\\day02\\03表单.html"
driver.get(url)
# 查找用户名
username = driver.find_element_by_name("yhm1")
# 查找密码元素
pwd = driver.find_element_by_name("yhm2")
# 用户名输入admin send_keys("内容")
username.send_keys("admin")
# 密码输入123456
pwd.send_keys("123456")
# 暂停3s
sleep(5)
# 退出浏览器
driver.quit()
3) class_name定位
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器对象
driver = webdriver.Chrome()
# 打开url
# 在路径前添加r也可
# r是修饰的字符串,如果字符串中有转义字符,不进行转义使用
# url = r"E:\课程文件\暑期学习\html\day02\03表单.html"
url = "E:\\课程文件\\暑期学习\\html\\day02\\03表单.html"
driver.get(url)
# 查找用户名
username = driver.find_element_by_class_name("yhm1")
# 查找密码元素
pwd = driver.find_element_by_class_name("yhm2")
# 用户名输入admin send_keys("内容")
username.send_keys("admin")
# 密码输入123456
pwd.send_keys("123456")
# 暂停3s
sleep(5)
# 退出浏览器
driver.quit()
id一般是唯一的
name可以重复,可以包含一组元素
class可以多个名字,通过名字来获得属性
4) tag_name定位
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
driver = webdriver.Chrome()
# 打开页面
url = "E:\\课程文件\\暑期学习\\html\\day02\\03表单.html"
driver.get(url)
# 使用tag_name定位用户名,并输入admin
# 页面中如果存在多个同名的标签,只会返回第一个。
driver.find_element_by_tag_name("input").send_keys("admin")
# 暂停3s
sleep(3)
# 退出驱动器
driver.quit()
5) link_text以及partial_link_text
"""
driver.find_element_by_link_text("") # 定位元素方法
click() # 点击方法
注意:
link_text:
1、只能定位a标签
2、link_text定位元素的内容必须为全部匹配
"""
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
driver = webdriver.Chrome()
# 打开页面
url = r"E:\课程文件\暑期学习\8天web全套测试视频视频教程\8天web自动化讲义\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 使用link_text定位 访问网站
driver.find_element_by_link_text("访问 新浪 网站").click()
# 暂停3s
sleep(3)
# 退出驱动器
driver.quit()
partial_link_text定位元素的内容可以为模糊部分值,但是必须能代表唯一性
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
driver = webdriver.Chrome()
# 打开页面
url = r"E:\课程文件\暑期学习\8天web全套测试视频视频教程\8天web自动化讲义\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 使用partial_link_text可以实现模糊定位 访问网站
# 没有使用唯一代表词时,默认操作符合条件的第一个元素
# 使用全部匹配也能够进行操作。
driver.find_element_by_partial_link_text("访问").click()
# 暂停3s
sleep(3)
# 退出驱动器
driver.quit()
6) Xpath
(1)路径
绝对路径
相对路径
(2)路径结合属性
(3) 路径结合逻辑
(4)路径结合层级
(5) 案例
"""
使用绝对路径定位 用户名,输入admin
暂停2s
使用相对路径定位 密码框,输入123
driver.find_element_by_xpath()
"""
# 导包
from selenium import webdriver
from time import sleep
# 创建浏览器驱动对象
driver = webdriver.Chrome()
# 打开html界面
url = r"E:\课程文件\暑期学习\8天web全套测试视频视频教程\8天web自动化讲义\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 定位元素
driver.find_element_by_xpath('//*[@id="userA"]').send_keys("admin")
sleep(3)
driver.find_element_by_xpath('//*[@id="passwordA"]').send_keys("admin")
# 暂停3s
sleep(3)
# 关闭
driver.quit()
(6)Xpath拓展
Xpath延伸
- //*[text()=‘XXX’] # 定位文本值等于XXX的元素
提示:一般适合 p标签,a标签- //*[contains(@属性,‘xxx’)] # 定位属性包含xxx的元素 【重点】
提示:contains为关键字,不可更改。- //*[starts-with(@属性,‘xxx’)] # 定位属性以xxx开头的元素
提示:starts-with为关键字不可更改
7) CSS定位
说明:
1. CSS一种标记语言,焦点:数据的样式。控制元素的显示样式,就必须先找到元素,在css标记语言中找元素使用css选择器;
2. css定位就是通过css选择器工具进行定位。
3. 极力推荐使用,查找元素的效率比xpath高,语法比xpath更简单。
方法:
driver.find_element_by_css_selector()
(1)CSS定位常用策略
- id 选择器
前提:元素是必须有id属性
语法:#id 如:#passwordA
- id 选择器
- class 选择器
前提:元素是必须有class属性
语法:.class 如:.telA
- class 选择器
- 元素选择器
语法:element 如:input
- 元素选择器
- 属性选择器
语法:[属性名=属性值]
- 属性选择器
- 层级选择器
语法:
1. p>input
2. p input
- 层级选择器
- 提示:>与空格的区别,大于号必须为子元素,空格则不用。
(2)案例
"""
1、使用id选择器定位用户名,输入admin
2、使用属性选择器定位密码框,输入123456
3、使用class选择器定位电话号码,输入182
4、元素选择器定位span标签获取其文本值
5、使用层级选择器定位email,输入123456789
获取文本的方法: element.text
"""
# 导包
from selenium import webdriver
from time import sleep
# 创建浏览器驱动对象
driver = webdriver.Chrome()
# 打开html界面
url = r"E:\课程文件\暑期学习\8天web全套测试视频视频教程\8天web自动化讲义\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# id选择器定位元素
driver.find_element_by_css_selector('#userA').send_keys("admin")
sleep(3)
# 属性选择器
driver.find_element_by_css_selector('[name="passwordA"]').send_keys("123456")
sleep(3)
# class选择器
driver.find_element_by_css_selector('.telA').send_keys("182")
sleep(3)
# 元素选择器
span = driver.find_element_by_css_selector('span').text
print("span的文本值为:"+span)
sleep(3)
# 层级选择器
driver.find_element_by_css_selector('p input[placeholder="电子邮箱A"]').send_keys("123456789")
sleep(3)
# 暂停3s
sleep(3)
# 关闭
driver.quit()
(3)CSS拓展
1. [属性^='开头的字母'] # 获取指定属性以指定字母开头的元素
2. [属性$='结束的字母'] # 获取指定属性以指定字母结束的元素
3. [属性*='包含的字母'] # 获取指定属性包含指定字母的元素
复制xpath:/html/body/form/div/fieldset/p[1]/input
复制最简xpath://*[@id="userA"]
复制CSS路径:html body form div#zc fieldset p#p1 input#userA
提示:
1. 虽然借助工具可以快速生成xpath路径和css语法,但是前期不建议使用。
2. 工具在智能,没有人智能。
三、元素定位方式总结
1)定位一组元素
方法:driver.find_elements_by_xxx()
返回结果:类型为列表,要对列表进行访问和操作必须指定下标或进行遍历,[下标从0开始]
"""
目标:
driver.find_elements_by_xxx
"""
# 导包
from selenium import webdriver
from time import sleep
# 获取 浏览器驱动对象
driver = webdriver.Firefox()
# 打开 注册A.html
url = r"D:\web自动化素材\课堂素材\注册A.html"
driver.get(url)
# 获取所有的input元素
# elements = driver.find_elements_by_tag_name("input")
elements = driver.find_elements_by_id("userA")
print(len(elements))
print("elements的类型为:", type(elements))
# 输入内容
# elements[0].send_keys("admin")
# 通过遍历来输入
for el in elements:
el.send_keys("admin")
# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()
2)扩展8种元素定位的底层实现
方式:driver.find_element(By.xxx, 'value')
参数说明:
By.xxx :为By类的类型 如:By.ID
value: 元素的定位值 如: "userA"
By类:需要导包 位置: from selenium.webdriver.common.by import By
版权声明:本文为CloserSide原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。