文章目录
# 导包
from time import sleep
from selenium import webdriver
# 获取浏览器驱动
driver = webdriver.Chrome()
# 打开url
driver.get('https://baidu.com')
# 暂停 3 秒
sleep(3)
# 关闭浏览器驱动
driver.quit()
selenium提供了 8 种元素定位方式
- id name class_name(使用元素的class属性定位)——元素属性定位
- tag_name
- link_text 定位a标签(超链接)
- partial_link_text 定位a标签(超链接)模糊
- XPath 基于元素路径
- CSS 元素选择器
总结:
1基于元素属性特有定位方式——id name class_name
基于元素标签名称定位——tag_name
定位超文本链接——link_text 、partial_link_text
基于元素路径定位——xpath
基于选择器 ——CSS
id 定位
id 一般情况下在当前页面是唯一的
element = driver.find_element_by_id(id)
练习:
# id 定位练习
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器对象
driver = webdriver.Chrome()
# 打开本地页面 url
# \ 在python中是转义字符,前面加个 r
# r 如果字符中又转义字符,不转义
url = r"D:\桌面\摆烂DDD\测试\3.UI自动化\8天web自动化全套测试—资料\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 使用双反斜杠 进行转义操作
# url = "E:\\课堂\\北京\\北京十期\\Day01\\02_其他资料\\浏览器\\课堂素材\\注册A.html"
# 使用本地浏览模式 前缀必须添加 file:///
# url = "file:///E:/课堂/北京/北京十期/Day01/02_其他资料/浏览器/课堂素材/注册A.html"
# 查找 用户名
username = driver.find_element_by_id("userA")
# 查找密码元素
password = driver.find_element_by_id("password")
# 用户输入admin
username.send_keys("admin")
# 输入密码 123456
password.send_keys("123456")
# 暂停3s
sleep(3)
#
# 退出浏览器驱动
driver.quit()
name定位
这个可以重复
前提:元素要有 name 属性
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器对象
driver = webdriver.Firefox()
# 打开url
url = r"E:xxx"
driver.get(url)
# 查找用户名 输入admin
driver.find_element_by_name("userA").send_keys("admin")
# 查找密码 输入123456
driver.find_element_by_name("passwordA").send_keys("123456")
# 暂停3秒
sleep(3)
# 关闭浏览器
driver.quit()
class_name 定位
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器对象
driver = webdriver.Firefox()
# 打开url
url = r"xxx"
driver.get(url)
# 查找电话 输入 18611111111
driver.find_element_by_class_name("telA").send_keys("18611111111")
# 暂停3秒
sleep(3)
# 关闭浏览器
driver.quit()
tag_name 定位
标签:尖括号后面那个元素
"""
需求:
1. 使用tag_name定位方式,使用注册A.html页面,用户名输入admin
方法:
1. driver.find_element_by_tag_name("") # 定位元素方法
2. send_keys() # 输入方法
3. driver.quit() # 退出方法
"""
# 导包
from selenium import webdriver
from time import sleep
# 获取 浏览器驱动对象
driver = webdriver.Firefox()
# 打开 注册A.html
url = r"xxx"
driver.get(url)
# 使用tag_name定位用户名 并 输入admin
# 注意:页面中如果存在多个相同的标签名,默认返回第一个标签
driver.find_element_by_tag_name("input").send_keys("admin")
# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()
link_text(全部匹配) 和partial_link_text(模糊匹配)
只使用于——超链接
# link_text 定位
driver.find_element_by_link_text("xxx").click()
# partical_link_text 部分定位——唯一代表词,默认操作符合条件的第一个元素
driver.find_element_by_partical_link_text("xxx").onclick
xpath——基于路径
x——xml:一种标记语言,用于数据的存储和传递,
定位策略
- 路径-定位
- 利用元素属性-定位
- 属性与逻辑结果–定位
- 层级与属性结合-定位
定位方法
element = driver.find_element_by_xpath(xpath)
绝对路径:以 / 单斜杠开头
逐级编写,不能跳级
相对路径:只有开头的时候使用双斜杠 //
以双杠开头,双斜杠后面跟元素名称,不知元素名称可以使用 * 代替
// input
// *
用到属性值必须要加 @
这个所有标签属性都一样
尽量使用相对路径
"""
需求:
1. 使用绝对路径定位 用户名 输入 admin
2. 暂停2秒钟
3. 使用相对路径定位 密码框 输入 123
方法:
driver.find_element_by_xpath()
"""
# 导包
from selenium import webdriver
from time import sleep
# 获取 浏览器驱动对象
driver = webdriver.Firefox()
# 打开 注册A.html
url = r"xxx"
driver.get(url)
# 使用绝对路径定位 用户名 admin
# driver.find_element_by_xpath("/html/body/form/div/fieldset/p[1]/input").send_keys("admin")
# 使用层级结合属性 定位用户名:
# 快捷键: driver.xpath
driver.find_element_by_xpath("//p[@id='p1']/input").send_keys("admin")
# 暂停2秒
sleep(2)
# 使用相对路径 定位 密码 123
# driver.find_element_by_xpath("//input[@id='passwordA']").send_keys("123")
# 使用逻辑结合
driver.find_element_by_xpath("//input[@id='passwordA' and @placeholder='密码A']").send_keys("123")
# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()
starts_with: 以什么开头的,书写的时候不能跳字符
CSS 定位
用于选择需要添加 样式的元素
element = driver.find_element_by_css_selector(css_selector)
定位策略
-
id选择器——#id
-
class 选择器—— .class
-
元素选择器——element,适合单独元素
-
属性选择器
这个特别灵活5. 层级选择器
方法一:尖括号是直属关系,只能找下一级
方法二:这个空格,后面只要是他的下级就行,不管中间隔了多少
下面这两个是一样的效果
总结,css策略
获取元素的方法:元素.text
"""
需求:
1. 使用css id选择器 定位用户名 输入admin
2. 使用css 属性选择 定位密码框 输入123456
3. 使用 css class 选择器 定位电话号码: 18611112222
4. 使用css 元素选择器 定位span标签获取文本值
5. 使用层级选择器 定位email 输入 123@qq.com
方法:
driver.find_element_by_css_selector()
获取文本的方法 元素.text
"""
# 导包
from selenium import webdriver
from time import sleep
# 获取 浏览器驱动对象
driver = webdriver.Firefox()
# 打开 注册A.html
url = r"xxx"
driver.get(url)
# 1. 使用css id选择器 定位用户名 输入admin
driver.find_element_by_css_selector("#userA").send_keys("admin")
# 2. 使用css 属性选择 定位密码框 输入123456
driver.find_element_by_css_selector("[name='passwordA']").send_keys("123456")
# 3. 使用 css class 选择器 定位电话号码: 18611112222
driver.find_element_by_css_selector(".telA").send_keys("18611112222")
# 4. 使用css 元素选择器 定位span标签获取文本值
span = driver.find_element_by_css_selector("span").text
print("获取的span标签文本值:", span)
# 5. 使用层级选择器 定位email 输入 123@qq.com
driver.find_element_by_css_selector("p>input[placeholder='电子邮箱A']").send_keys("123@qq.com")
# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()
css扩展
"""
需求:
1. 使用css id选择器 定位用户名 输入admin
2. 使用css 属性选择 定位密码框 输入123456
3. 使用 css class 选择器 定位电话号码: 18611112222
4. 使用css 元素选择器 定位span标签获取文本值
5. 使用层级选择器 定位email 输入 123@qq.com
方法:
driver.find_element_by_css_selector()
获取文本的方法 元素.text
"""
# 导包
from selenium import webdriver
from time import sleep
# 获取 浏览器驱动对象
driver = webdriver.Firefox()
# 打开 注册A.html
url = r"D:\web自动化素材\课堂素材\注册A.html"
driver.get(url)
# 1. 使用css id选择器 定位用户名 输入admin 以指定字母开头 语法:[属性^='开头的字母']
driver.find_element_by_css_selector("[name^='us']").send_keys("admin")
# 2. 使用css 属性选择 定位密码框 输入123456 以指定字母结束 语法:[属性$='结束的字母']
driver.find_element_by_css_selector("[name$='dA']").send_keys("123456")
# 3. 使用 css class 选择器 定位电话号码: 18611112222 包含指定字母 语法:[属性*='包含字母']
driver.find_element_by_css_selector("[class*='el']").send_keys("18611112222")
# 4. 使用css 元素选择器 定位span标签获取文本值
span = driver.find_element_by_css_selector("span").text
print("获取的span标签文本值:", span)
# 5. 使用层级选择器 定位email 输入 123@qq.com
driver.find_element_by_css_selector("p>input[placeholder='电子邮箱A']").send_keys("123@qq.com")
# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()
在xpath 里面。属性要用@ 修饰
属性哪一行,text不是属性
css 和partical_ link_text 用的比较多
使用 driver.findelements_by xxx,返回的是一个列表,列表的访问,要么使用下标,要么使用遍历
"""
目标:
driver.find_elements_by_xxx
"""
# 导包
from selenium import webdriver
from time import sleep
# 获取 浏览器驱动对象
driver = webdriver.Firefox()
# 打开 注册A.html
url = r"xxx"
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()
find_element ——
"""
目标:
driver.find_element()
需求:
1. 使用driver.find_element()方法
2. 输入用户名:admin
3. 输入密码:123456
"""
# 导包
from selenium import webdriver
from time import sleep
# 获取 浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Firefox()
# 打开 注册A.html
url = r"xxx"
driver.get(url)
# 使用find_element()定位用户名
# ctrl+alt+空格 获得包
driver.find_element(By.ID, "userA").send_keys("admin")
# 使用find_element()定位密码
driver.find_element(By.CSS_SELECTOR, "#passwordA").send_keys("123456")
# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()
By 需要导包