pprint.pprint(ckList) # 完美打印
说明:
1、ui自动化中,登录是必须执行的。
1、对于没有验证码的系统,直接定位元素自动化操作就可以。
2、对于有验证码的系统,可以用cookie绕过登录。
2、局限性
1、cookie 必须有效,这就意味着我们需要先手动登陆一次,获取cookie。
2、cookie若失效了,则需再次手动获取。
3、介于这种方式的局限性,一般在遭遇验证码之后,我们还有如下的解决方案:
1、万能验证码(开发在系统中写死一个验证码)。
2、让开发在测试环境中取消人机验证(可以做一个开关,正式环境:关闭,测试环境:开启)。
一、获取/删除/添加cookie
from selenium import webdriver
import time
# 创建浏览器驱动对象
driver = webdriver.Chrome(r"D:\chromedriver\chromedriver_win32-V103.0.5060.53\chromedriver.exe")
driver.implicitly_wait(3) # 智能等待_隐性等待
# 访问网址
driver.get("http://127.0.0.1:8088/")
# 数入用户名
driver.find_element_by_name("username").send_keys("ymnl")
# 输入密码
driver.find_element_by_name("password").send_keys("123456")
# 点击登录按钮
driver.find_element_by_tag_name("button").click()
1、获取所有cookie信息
# 1、get_cookies()
# 2、返回是一个列表,列表中存的是一个个的字典。
# 3、cookie 的内容是以键值对的形式存在。
ckList = driver.get_cookies()
print(ckList)
pprint.pprint(ckList) # 完美打印
# 返回
# [{'domain': '127.0.0.1', 'httpOnly': False, 'name': 'Hm_lpvt_750463144f16fe69eb3ac11bea1c4436', 'path': '/', 'secure': False, 'value': '1656071460'},
# {'domain': '127.0.0.1', 'expiry': 1687607459, 'httpOnly': False, 'name': 'Hm_lvt_750463144f16fe69eb3ac11bea1c4436', 'path': '/', 'secure': False, 'value': '1656071460'},
# {'domain': '127.0.0.1', 'expiry': 1687607459, 'httpOnly': True, 'name': 'beegosessionID', 'path': '/', 'secure': False, 'value': 'c380886acb7d46580a4336568fee3174'}]
2、获取单个cookie信息
# 1、get_cookie()
# 2、参数为name的值:beegosessionID
ckOne = driver.get_cookie("beegosessionID")
print(ckOne)
# 返回
# {'domain': '127.0.0.1', 'expiry': 1687607687, 'httpOnly': True, 'name': 'beegosessionID', 'path': '/', 'secure': False, 'value': '64652743d4725f166338153efdf70bb7'}
3、添加cookie
# 1、add_cookie()
# 2、接收的参数是一个字典,必须有name和value值。
# 3、添加后返回的cookies列表会增加1条cookie。
ckAdd = driver.add_cookie({"name": "zs", "age": "18", "value": "123"})
# 获取所有cookie信息
ckList = driver.get_cookies()
print(ckList)
# 返回
# [{'domain': '127.0.0.1', 'httpOnly': False, 'name': 'zs', 'path': '/', 'secure': False, 'value': '123'},
# {'domain': '127.0.0.1', 'httpOnly': False, 'name': 'Hm_lpvt_750463144f16fe69eb3ac11bea1c4436', 'path': '/', 'secure': False, 'value': '1656071837'},
# {'domain': '127.0.0.1', 'expiry': 1687607836, 'httpOnly': False, 'name': 'Hm_lvt_750463144f16fe69eb3ac11bea1c4436', 'path': '/', 'secure': False, 'value': '1656071837'},
# {'domain': '127.0.0.1', 'expiry': 1687607836, 'httpOnly': True, 'name': 'beegosessionID', 'path': '/', 'secure': False, 'value': 'ca10da34cdcce2352c79f1b38f7836f7'}]
4、删除所有的cookie
# 1、delete_all_cookies()
# 2、返回结果为:[]
driver.delete_all_cookies()
# 获取所有cookie信息
ckList = driver.get_cookies()
print(ckList)
5、删除某个指定的cookie
# 1、delete_all_cookies()
# 2、参数为name的值:zs
# 3、删除后返回的cookies列表会减少1条cookie。
driver.delete_cookie("zs")
# 获取所有cookie信息
ckList = driver.get_cookies()
print(ckList)
二、通过cookie绕过登录测试
1、先获取登录后的cookie信息列表
# 获取登录后的cookie信息列表
pprint.pprint(driver.get_cookies()) # 完美打印
cookieSli = [{'domain': '127.0.0.1',
'httpOnly': False,
'name': 'Hm_lpvt_750463144f16fe69eb3ac11bea1c4436',
'path': '/',
'secure': False,
'value': '1656073218'},
{'domain': '127.0.0.1',
'expiry': 1687609218,
'httpOnly': False,
'name': 'Hm_lvt_750463144f16fe69eb3ac11bea1c4436',
'path': '/',
'secure': False,
'value': '1656073218'},
{'domain': '127.0.0.1',
'expiry': 1687609218,
'httpOnly': True,
'name': 'beegosessionID',
'path': '/',
'secure': False,
'value': '6e3626745ff7e70d5d19a76bb7b73f42'}]
2、通过cookie绕过登录测试
cookieSli = [{'domain': '127.0.0.1',
'httpOnly': False,
'name': 'Hm_lpvt_750463144f16fe69eb3ac11bea1c4436',
'path': '/',
'secure': False,
'value': '1656073218'},
{'domain': '127.0.0.1',
'expiry': 1687609218,
'httpOnly': False,
'name': 'Hm_lvt_750463144f16fe69eb3ac11bea1c4436',
'path': '/',
'secure': False,
'value': '1656073218'},
{'domain': '127.0.0.1',
'expiry': 1687609218,
'httpOnly': True,
'name': 'beegosessionID',
'path': '/',
'secure': False,
'value': '6e3626745ff7e70d5d19a76bb7b73f42'}]
from selenium import webdriver
# 创建浏览器驱动对象
driver = webdriver.Chrome(r"D:\chromedriver\chromedriver_win32-V103.0.5060.53\chromedriver.exe")
driver.implicitly_wait(3) # 智能等待_隐性等待
# 访问网址
driver.get("http://127.0.0.1:8088/")
# 清除所有的cookie,因为原先的cookie是无登录状态的。
driver.delete_all_cookies()
# 挨个将获取到的有登录状态的cookie添加进去。
for cookie in cookieSli:
driver.add_cookie(cookie)
# 最后,要刷新一下
driver.refresh()