frame切换&多窗口切换&窗口截图&验证码处理

  • 1 frame切换
  • 1.1 什么是frame?
  • 1.2 frame切换方法
  • 2 多窗口切换
  • 3 窗口截图
  • 4 验证码处理
  • 4.1 验证码处理方式:
  • 4.2 验证码处理方式:记录cookie
  • 4.2.1 cookie是什么?
  • 4.2.2 cookie操作


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,以此来辨认用户状态

java 如何在framemaker里转换类型 frame切换_服务器


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()