其他api的使用
- Frame切换
- frame方法
- 认识frame
- 切换多窗口
- 多窗口方法
- 认识多窗口
- 切换多窗口工具封装
- 切换多窗口工具方法
- 认识切换多窗口工具
- 面试题:执行UI自动化时如找不到元素
- 截图应用
- 截图方法
- 认识截图
- 图片添加的问题
- 时间戳方法
- 时间戳认识
- 验证码处理
- 验证码方法
- cookie
- 验证码认识
Frame切换
frame方法
1、切换到iframe driver.switch_to.frame(iframe元素)
2、操作元素
3、回到默认⻚⾯ driver.switch_to.default_content()
认识frame
案例:打开‘注册实例.html’页面,完成以下操作
1). 填写主页面的注册信息
2). 填写注册页面A中的注册信息
3). 填写注册页面B中的注册信息
from time import sleep
from selenium import webdriver
# 1、获取浏览器
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 2、打开url
driver.get("file:///D:/Chrome/Register.html")
"""
页面注册A在iframe标签中,验证不处理是否能操作
"""
driver.find_element(By.CSS_SELECTOR,"#user").send_keys("admin")
# 获取注册A iframe元素
A = driver.find_element(By.CSS_SELECTOR, "#idframe1")
# 1、切换到A
driver.switch_to.frame(A)
# 2、注册A操作
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
# 3、回到默认目录 注册时例.html
driver.switch_to.default_content()
# 4、获取注册B iframe元素
B = driver.find_element(By.CSS_SELECTOR, "#idframe2")
# 5、切换到B
driver.switch_to.frame(B)
# 6、注册B操作
driver.find_element(By.CSS_SELECTOR,"#userB").send_keys("admin")
# 4、关闭浏览器
sleep(3)
driver.quit()
切换多窗口
多窗口方法
1、获取窗⼝句柄 driver.window_handles
2、使⽤句柄切换窗⼝ driver.switch_to.widnow(handle)
句柄:窗⼝的唯⼀标识符。
认识多窗口
from time import sleep
from selenium import webdriver
# 1、获取浏览器
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 2、打开url
driver.get("file:///D:/Chrome/Register.html")
"""
为什么要处理多窗口?-- selenium默认焦点在启动窗口,要操作其他窗口必须处理。
需求:
1、打开注册示例页面
2、点击注册A网页链接
3、填写注册A网页内容
"""
print("操作之前所有窗口的句柄:", driver.window_handles)
driver.find_element(By.LINK_TEXT, "注册A网页").click()
handles = driver.window_handles
print("操作之后所有窗口的句柄:", handles)
# 重点:切换窗口
driver.switch_to.window(handles[1])
# 填写注册A网页 用户名
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")
# 4、关闭浏览器
sleep(3)
driver.quit()
切换多窗口工具封装
切换多窗口工具方法
def switch_window(title):
# 1、获取所有窗⼝句柄
handels = driver.window_handles
# 2、遍历句柄进⾏切换
for handel in handels:
# 操作
driver.switch_to.window(handel)
# 获取当前窗⼝title 并且 判断是否⾃⼰需要的窗⼝
if driver.title == title:
# 操作代码
return "已找到{}窗⼝,并且已切换成功".format(title)
认识切换多窗口工具
需求:
1、打开注册示例页面
2、点击 注册A网页 注册B网页
3、在A网页和B网页中输入 对用户名输入 admin
from time import sleep
from selenium import webdriver
# 1、获取浏览器
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 2、打开url
driver.get("file:///D:/Chrome/Register.html")
"""
需求:
如何随心所欲切换窗口?
思路:
1、获取所有窗口句柄
2、切换窗口
3、获取当前所在窗口title
4、判断title是否为需要的窗口
5、执行代码
需求:
1、打开注册示例页面
2、点击 注册A网页 注册B网页
3、在A网页和B网页中输入 对用户名输入 admin
"""
def switch_window(title):
# 1、获取所有窗口句柄
handels = driver.window_handles
# 2、遍历句柄进行切换
for handel in handels:
# 操作
driver.switch_to.window(handel)
# 获取当前窗口title 并且 判断是否自己需要的窗口
if driver.title == title:
# 操作代码
return "已找到{}窗口,并且已切换成功".format(title)
title_A = "注册A"
title_B = "注册B"
# 打开注册A和注册B网页
driver.find_element(By.LINK_TEXT, "注册A网页").click()
driver.find_element(By.LINK_TEXT, "注册B网页").click()
# 填写注册A网页 用户名
print(switch_window(title_A))
driver.find_element(By.CSS_SELECTOR, "#userA").send_keys("admin")
print(switch_window(title_B))
driver.find_element(By.CSS_SELECTOR, "#userB").send_keys("admin")
# 4、关闭浏览器
sleep(3)
driver.quit()
面试题:执行UI自动化时如找不到元素
截图应用
截图方法
driver.get_screenshot_as_file(“xxx.png”) 1
认识截图
from time import sleep
import time
from selenium import webdriver
# 1、获取浏览器
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 2、打开url
driver.get("file:///D:/Chrome/%E6%B3%A8%E5%86%8CA%E9%BB%84%E8%89%B2.html")
# 3、查找操作元素
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
driver.find_element(By.CSS_SELECTOR,"#passwordA").send_keys("123456")
driver.find_element(By.CSS_SELECTOR,"#telA").send_keys("13600001111")
driver.find_element(By.CSS_SELECTOR,"#emailA").send_keys("123@qq.com")
# 截图
driver.get_screenshot_as_file("register.png")
driver.get_screenshot_as_file("error_{}.png".format(time.strftime("%Y_%m_%d %H_%M_%S")))
# 4、关闭浏览器
sleep(3)
driver.quit()
图片添加的问题
时间戳方法
driver.get_screenshot_as_file(“error_{}.png”.format(time.strftime(“%Y_%m_%d
%H_%M_%S”)))
时间戳认识
import time
print(time.strftime("%Y_%m_%d %H_%M_%S"))
验证码处理
验证码方法
1、去除验证码
2、使⽤万能验证码
3、使⽤图⽚识别技术(识别效率低)
4、使⽤cookie
cookie
由服务器⽣成,存储在客户端的登录凭证
1、获取cookie # 获取所有driver.get_cookies()
2、添加cookie # driver.add_cookie(data)
data = {"name":"BDUSS","value":"由于安全问题,暂时删除。"}
验证码认识
需求:使用cookie实现跳过登录
1). 手动登录百度,获取cookie
2). 使用获取到的cookie,达到登录目的,然后就可以执行登录之后的操作
BDUSS是登录百度后的唯一身份凭证(*.baidu.com)
,拿到BDUSS就等于拿到帐号的控制权, 通行贴
吧、知道、百科、文库、空间、百度云等百度主要产品
"""
需求:使用cookie实现百度登录
依赖kookies: BDUSS
"""
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
# 添加cookie
data = {"name": "BDUSS", "value": "由于安全问题,暂时删除。"}
driver.add_cookie(data)
driver.get_cookies()
# 暂停3秒
sleep(3)
# 刷新
driver.refresh()
sleep(3)
driver.quit()