webUI自动化之获取cookies,添加cookies实现免登录

前言:在测试过程中,初了登录的测试用例外,很多测试用例是不需要每次都进行一次登录操作的。
这个时候,我们只需要获取到cookies后,将其放入一个文件中,打开目标url时,将文件中的cookies获取并添加到浏览器驱动即可。

一、实现一次登录,获取cookies,将此功能做如下封装:

from testcases.test_login import LoginPage
from common.get_yaml import get_yaml_data
from selenium import webdriver
import os
import time
import json

# cookies的yaml文件路径
cookies_yaml_path = os.path.dirname(os.path.dirname(__file__)) + "\\cookies.yaml"


class GetCookies:
    @classmethod
    def get_cookie(cls, driver):
        # 实例化登录页面对象:LoginPage对象
        lp = LoginPage(driver)
        # 调用登录页的登录动作,传入账号密码
        lp.action_login("admin", "111111")
        time.sleep(2)
        # 获取cookies并写入文件
        cookies = driver.get_cookies()
        with open(cookies_yaml_path, "w")as f:
            json.dump(cookies, f)

核心思想和步骤:
1、建一个存放cookies的yaml文件,并获得其路径。
2、实现登录。
3、登录后使用driver.get_cookies()获取cookies内容。
4、with open(cookies的yaml文件路径,“w”写模式),调用json模块将其序列化并写入文件(json模块的dump方法)。

获取到cookies后,下一步就是进行添加cookies,将此功能做如下封装。

    def open_url(cls, url, driver):
        # 清除浏览器cookie
        driver.delete_all_cookies()
        # 从cookies.yaml文件中获取最新的cookie并加入浏览器中
        cookies_str = get_yaml_data("cookies.yaml", os.path.dirname(os.path.dirname(__file__)) + "\\")for cookie in cookies_str:
            driver.add_cookie(cookie)
        # 打开需要测试的页面url
        driver.get(url)

核心思想和步骤:
1、driver.delete_all_cookies(),清楚浏览器的cookies。
2、从cookies的yaml文件中获取cookies文本。
3、利用for循环将cookies添加到浏览器,使用driver.add_cookie().
4、打开目标url。

 

注意:当我们获取到了cookies后,需要打开目标url之前,先打开一个我们测试的网页(相同domian的网页,通常打开首页即可)
不然的话,会报如下错误:

selenium.common.exceptions.InvalidCookieDomainException: Message: Document is cookie-averse

webUI自动化之获取cookies,添加cookies实现免登录

 

 如上图,在调用封装的open_url前,打开相同domain的url,就可以避免如上报错。

 

webUI自动化之获取cookies,添加cookies实现免登录

上一篇:vue项目引入css文件


下一篇:一套代码小程序&Web&Native运行的探索01