1 frame切换
1.1 什么是frame?
frame是HTML页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素;frame的两种形式:
# 形式一:
<frameset cols="25%,75%">
<frame src="页面1">
<frame src="页面2">
</frameset>
# 形式二:
<iframe name="iframe_a" src="页面" width="250" height="200"></iframe>
1.2 frame切换方法
(1)切换到指定frame:driver.switch_to.frame(frame_reference) frame_reference:frame框架的name、 id或者定位到的frame元素
(2)恢复默认页面:driver.switch_to.default_content() 在frame中操作其他页面,必须先回到默认页面,才能进一步操作
2 多窗口切换
在HTML页面中,当点击超链接或者按钮时, 有些页面会在新窗口打开;Selenium中封装了获取当前窗口句柄、获取所有窗口句柄和切换到指定句柄窗口的方法;句柄:英文handle,是窗口的唯一识别码。
(1)获取当前窗口句柄:driver.current_window_handle (2)获取所有窗口句柄:driver.window_handles (3)切换指定句柄窗口:driver.switch_to.window(handle)
# 使用账号密码登陆牛客网
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
driver = webdriver.Chrome()
driver.get("https://www.nowcoder.com/")
driver.find_element(By.XPATH,"//a[@id='nav-login']").click()
# 获取所有窗口句柄
handles = driver.window_handles
# 获取当前窗口句柄
handle_now = driver.current_window_handle
# 获取登陆页面的句柄并切换窗口
for handle_login in handles:
if handle_login!=handle_now:
driver.switch_to.window(handle_login)
# 切换为账号密码登陆
driver.find_element(By.XPATH,"//li[@class='tab-item']").click()
# 输入账号密码
driver.find_element(By.XPATH,"//div[@class='el-input']//input[@type='text']").send_keys("XXX")
driver.find_element(By.XPATH,"//input[@type='password']").send_keys("XXX")
driver.find_element(By.XPATH,"//button[@type='button']").click()
sleep(3)
driver.quit()
3 窗口截图
执行自动化测试的脚本有时候打印的错误信息不是十分明确,这时候可以通过保存当前窗口的截图直观的找出出错的原因。
截图方法: driver.get_screenshot_as_file(图片保存路径) driver.save_screenshot(图片保存路径)
4 验证码处理
验证码是为了防止恶意的请求行为,增加应用安全性而随机生成的图片、数字、字母、算术题等信息。在Web应用中,大部分系统在登陆注册时都要求输入验证码。
4.1 验证码处理方式:
(1)去掉验证码:测试环境下采用,由开发完成 (2)设置万能验证码:生产环境和测试环境采用,由开发完成 (3)验证码识别技术:通过Python-tesseract来识别图片类型验证码,验证码种类多,成功率也不高,不适合使用 (4)记录cookie: 通过记录cookie进行跳过登录
4.2 验证码处理方式:记录cookie
4.2.1 cookie是什么?
(1)Cookie是由Web Server生成的保存在用户浏览器上的小文本文件,可以包含用户相关的信息 (2)Cookie数据格式:键值对 (3)Cookie产生:客户端请求服务器,如果服务器需要记录该用户状态,就给客户端浏览器设置一个Cookie数据 (4)Cookie使用:当浏览器再次请求该网站时, 浏览器把请求的数据和Cookie数据一同提交给服务器,服务器检查该Cookie,以此来辨认用户状态 cookie一般用于: (1)记住密码和自动登录 (2)会话跟踪,记录用户登录状态 (3)电商类项目中,记录用户在未登录状态下购物车中的商品
4.2.2 cookie操作
(1)获取指定cookie:driver.get_cookie(cookie名) (2)获取当前网站所有cookies:driver.get_cookies(),返回一个存放cookie信息的列表,cookie信息存放在字典中 (3)添加cookie:driver.add_cookie(“name”:“值”,“value”:“值”)
# 使用cookie绕过登陆实现步骤:
# step1:手动登录百度网站
# step2:手动获取登录后的cookies
# step3: add_cookie
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
driver.add_cookie({"name":"BDUSS","value":"值"})
driver.refresh() # 必须刷新才能看到效果
sleep(5)
driver.quit()
|