今日任务
- 下拉选择框、弹出框、滚动条操作
- frame框架、多窗口切换
- 窗口截图、验证码处理
Q1:下拉框
from time import sleep
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.get('')
# 需求:使用‘注册A.html’页面,完成对城市的下拉框的操作
# 0.定位下拉框元素(如何获取下拉框元素? 页面--检查-粘贴复制 )
sel = driver.find_element_by_id('selectA')
# 1.实例化下拉框选择对象
se = Select(sel)
# 1)选择‘广州’
# 通过索引选择目标元素
se.select_by_index(2)
sleep(3)
# 2)暂停2秒,选择‘上海’
# 通过value属性值选择目标
se.select_by_value('')
sleep(3)
# 3)暂停2秒,选择‘北京’
# 通过可见文本信息选择目标元素
se.select_by_visible_text('')
sleep(3)
#注意
#
sleep(3)
driver.quit()
Q2: 弹出框
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('')
# 需求:打开注册A.html页面,完成以下操作:
# 1)点击alert按钮
# 凡是通过JS实现的系统弹窗,无法通过鼠标右键检查选项获取元素信息!!!
driver.find_element_by_id('').click()
# 2)关闭警告框
# 1.切换到弹窗 :只要是系统弹窗,无论哪一种,处理方法都是以下的步骤!!!
alert = driver.switch_to.alert
# 2.获取弹窗信息:获取弹窗信息必须在处理弹窗操作之前
print('弹窗信息是:',alert.text)
sleep(3)
# 3.去除弹窗
alert.accept()
# 3)输入用户名:admin
driver.find_element_by_id('userA').send_keys('admin')
sleep(3)
driver.quit()
Q3:滚动条
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('')
# 需求:打开注册页面A,暂停2秒后,滚动条拉到最底层,暂停2秒后,恢复原位置
sleep(2)
# 1)准备JS代码:1000只是一个尽可能大的值,不是准确值
js_down = "window.scrollTo(0,1000)"
# 2)执行JS代码
driver.execute_script(js_down)
sleep(3)
driver.quit()
Q4: frame处理
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('')
"""
需求:打开‘注册实例.html’页面,完成以下操作
1)填写主页面的注册信息
2)填写注册页面A中的注册信息
3)填写注册页面B中的注册信息
"""
# 1)填写主页面的注册信息
driver.find_element_by_id('userA').send_keys('admin1')
driver.find_element_by_id('passwordA').send_keys('123456')
# 2)填写注册页面A中的注册信息
driver.switch_to.frame('')
driver.find_element_by_id('userA').send_keys('')
driver.find_element_by_id('passwordA').send_keys('123456')
# 3)填写注册页面B中的注册信息
sleep(3)
driver.quit()
Q5: frame切换
1、基础代码
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('')
"""
需求:打开‘注册实例.html’页面,完成以下操作
1)填写主页面的注册信息
2)填写注册页面A中的注册信息
3)填写注册页面B中的注册信息
"""
# 1)填写主页面的注册信息
driver.find_element_by_id('userA').send_keys('admin')
driver.find_element_by_id('passwordA').send_keys('123456')
# 2)填写注册页面A中的注册信息
driver.switch_to.frame('')
driver.find_element_by_id('userA').send_keys('admin1')
driver.find_element_by_id('passwordA').send_keys('123456')
# 切换frame
# 3)填写注册页面B中的注册信息
driver.find_element_by_id('userB').send_keys('admin2')
driver.find_element_by_id('passwordB').send_keys('123456')
sleep(3)
driver.quit()
2、退出后再切换(类比:客厅---主卧---次卧,如果要实现从主卧到次卧,首先是先到客厅,然后到次卧)
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('')
"""
需求:打开‘注册实例.html’页面,完成以下操作
1)填写主页面的注册信息
2)填写注册页面A中的注册信息
3)填写注册页面B中的注册信息
"""
# 1)填写主页面的注册信息
driver.find_element_by_id('userA').send_keys('admin')
driver.find_element_by_id('passwordA').send_keys('123456')
# 2)填写注册页面A中的注册信息
driver.switch_to.frame('')
driver.find_element_by_id('userA').send_keys('admin1')
driver.find_element_by_id('passwordA').send_keys('123456')
# 切换回默认页面:如果连续切换多个frame,必须先回到默认页面,才能实现切换下一个frame
driver.switch_to.default_content()
# 切换frame
driver.switch_to.frame('myframe2')
# 3)填写注册页面B中的注册信息
driver.find_element_by_id('userB').send_keys('admin2')
driver.find_element_by_id('passwordB').send_keys('123456')
sleep(3)
driver.quit()
Q6:多窗口处理
1、查看当前窗口
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('')
# 1)点击‘注册A页面’链接
driver.find_element_by_id('ZCA').click()
# 查看当前窗口的句柄值
# 在浏览器一个声明周期内,任何一个窗口都有唯一的句柄值,可以通过句柄值完成窗口切换操作
print('当前句柄值为:', driver.current_window_handle)
# 2)打开的页面中,填写注册信息
driver.find_element_by_id('userA').send_keys('admin')
driver.find_element_by_id('passwordA').send_keys('123456')
sleep(3)
driver.quit()
2、切换窗口操作
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('')
# 1)点击‘注册A页面’链接
driver.find_element_by_id('ZCA').click()
# 查看当前窗口的句柄值
# 在浏览器一个声明周期内,任何一个窗口都有唯一的句柄值,可以通过句柄值完成窗口切换操作
print('当前句柄值为:', driver.current_window_handle)
# 切换窗口操作
# 1)获取所含有窗口句柄(包含新窗口)
handles = driver.window_handles
print(handles)
print(type(handles))
# 2)切换窗口:列表的-1 索引对应的值,始终是最新窗口的句柄值
driver.switch_to.window(handles[-1])
# 2)打开的页面中,填写注册信息
driver.find_element_by_id('userA').send_keys('admin')
driver.find_element_by_id('passwordA').send_keys('123456')
sleep(3)
driver.quit()
Q7:截图操作
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('')
driver.find_element_by_id('userA').send_keys('admin')
driver.find_element_by_id('passwordA').send_keys('1223456')
# 截图保存:默认推荐使用 .png格式
driver.get_screenshot_as_file('./info.png')
# 指定图片文件存放路径:需要先手动创建文件夹
driver.get_screenshot_as_file('./image/info.png')
sleep(3)
driver.quit()
Q8:截图操作-利用时间戳防止图片重名覆盖
from time import sleep,strftime
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('')
driver.find_element_by_id('userA').send_keys('admin')
driver.find_element_by_id('passwordA').send_keys('1223456')
# 截图保存:默认推荐使用 .png格式
# driver.get_screenshot_as_file('./info.png')
# 说明:Windows系统文件名不支持特殊符号,尽量只是用下划线
now_time = strftime('%Y%m%d_%H%M%S')
driver.get_screenshot_as_file('./info_{}.png'.format(now_time))
# 指定图片文件存放路径:需要先手动创建文件夹
# driver.get_screenshot_as_file('./image/info.png')
sleep(3)
driver.quit()
Q9:验证码处理
1、 cookie绕过登录
"""""
# uiautoday04 - 当前项目的名称;
# hm11_auto_login_baidu - 在文件创建过程中,在对话框中输入的新文件名称;
# HP - 当前用户的登录名;
# 2023/12/18 - 当前的系统日期;
# 19:16 - 当前系统时间;
"""""
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
# cookie绕过登录
# 1.整理关键cookie信息为字典数据
cookie_value = {'name':'BDUSS',
'value':'hYbktqdjZZNlNEbFlTdFNrRGdLUkN3TVM5SXpJOUUwNE9KNzFnLUYyZmp0YWRsSVFBQUFBJCQAAAAAAAAAAAEAAADBMuG5tqHIutLlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOMogGXjKIBlRG'}
# 调用方法添加cookie信息
driver.add_cookie(cookie_value)
# 刷新页面-->发送cookie信息给服务器进行验证!
driver.refresh()
sleep(3)
# driver.quit()
2、对比分析
"""""
# uiautoday04 - 当前项目的名称;
# hm12_cookie_other - 在文件创建过程中,在对话框中输入的新文件名称;
# HP - 当前用户的登录名;
# 2023/12/18 - 当前的系统日期;
# 19:38 - 当前系统时间;
"""""
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.maximize_window()
# 获取所有cookie信息
print(driver.get_cookies())
# 获取特定cookie信息 :需要传入name
driver.get_cookie('BDUSS')
sleep(3)
driver.quit()
今日总结
- 整理今日内容
- 灵活运用今日方法
- 预习Pytest框架&数据驱动&PO模式