Teresa_lqs 2022-01-20 11:13 采纳率: 100%
浏览 73
已结题

python自动化测试时,怎么让每个用例都保持登录状态?

现在正在学习自动化测试,用python编写代码,现在可以在京东商城实现自动登录。但是如果想执行其他用例,就是登录后的点击什么的,我不知道如何让每个独立的用例都保持登录状态
这是自动登录代码:
获取cookie:

# -*- coding: utf-8 -*-

from selenium import webdriver
from time import sleep
def get_cookies():
    driver = webdriver.Chrome()
    driver.maximize_window()  # 窗口最大化
    driver.implicitly_wait(5)  # 设置隐式等待
    url = 'https://www.jd.com/'
    driver.get(url)
    driver.find_element_by_class_name('link-login').click()  # 不要加s
    driver.find_element_by_link_text('账户登录').click() # a标签可以直接用文本
    # driver.find_element_by_id('longname').click()
    username = driver.find_element_by_id('loginname')
    username.clear() #如果有默认值,需要清空
    username.send_keys('15230199768')
    password =driver.find_element_by_id('nloginpwd')
    password.clear()
    password.send_keys('liqiushui123')
    sleep(20)
    cookies = driver.get_cookies()
    print(cookies)
if __name__ == '__main__':
    get_cookies()
    # sleep(100)



这是用cookie登录代码:


```python
# -*- coding: utf-8 -*-
from selenium import webdriver
from time import sleep

'''
1、通过selenium获取登录成功后的cookie信息
2、管理cookie信息
3、调用cookie信息,实现自动登录,从而完成其他需要登陆的测试用例
'''

def login():
    # 这是一个新打开的页面, 用getJingDongLogin中获取的cookie
    # expiry是cookie的有效期,想要永久使用:
    # 1、可以删除expiry 2、或者再去getJingDongLogin获取新的cookie复制过来



    cookies =[‘我的cookie’]

    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.implicitly_wait(5)  # 设置隐式等待
    url = 'http://www.jd.com'
    driver.get(url)
    sleep(5)
    # 清除浏览器中存在的cookie信息
    driver.delete_all_cookies()



if __name__ == '__main__':
    login()


↑上面就登录成功了
**以下是其他用例的代码**

```python
# -*- coding: utf-8 -*-
import os
import time
import unittest
from selenium import webdriver
from dateutil.parser import parse
from BeautifulReport import BeautifulReport
import loginWithCookies

class Test(unittest.TestCase):

    # 启动函数,每个用例测试前,都会执行该函数
    def setUp(self):
        self.browser = webdriver.Chrome()
        self.browser.set_window_size(1920, 1080)
        self.starttime = parse(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
        print("开始测试时间:", self.starttime)
        self.browser.get("https://www.jd.com/")
        time.sleep(3)

    # 结束函数,每个用例测试结束后,都会执行该函数
    def tearDown(self):
        time.sleep(3)
        self.browser.quit()
        self.endtime = parse(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
        print("测试结束时间:", self.endtime)
        totaltime = (self.endtime - self.starttime).total_seconds()
        print("总时长:", totaltime, "秒")




    # 测试用例1:以test_开头
    def test_01(self):
        u"""测试用例1"""
        # self.save_img('测试用例1')
        self.browser.find_element_by_partial_link_text('秒杀').click()
        # self.browser.find_element_by_id("loginname").send_keys("15230199768")
        time.sleep(1)

if __name__ == '__main__':
    unittest.main()


这样的test_01没办法保持登录,我也不知道咋搞,现在脑子比较混乱,求解答

  • 写回答

1条回答 默认 最新

  • 於黾 2022-01-20 11:22
    关注

    你前面的测试完了,就不要再测试了,把test去掉,然后后面的要先调用前面的函数
    不管你后续是多复杂的一个功能,总要从先登录开始吧

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月28日
  • 已采纳回答 1月20日
  • 创建了问题 1月20日

悬赏问题

  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。
  • ¥20 CST怎么把天线放在座椅环境中并仿真
  • ¥15 任务A:大数据平台搭建(容器环境)怎么做呢?
  • ¥15 YOLOv8obb获取边框坐标时报错AttributeError: 'NoneType' object has no attribute 'xywhr'
  • ¥15 r语言神经网络自变量重要性分析