selenium之logging日志加到项目中运用

直接上例子吧
有一点改动的地方就是:保存路径改了:

  path = os.path.dirname(os.path.dirname(__file__)) + '\\logs'
    rf_handler = logging.handlers.TimedRotatingFileHandler(path+'\\all.log', when='midnight', interval=1, backupCount=7,
                                                           atTime=datetime.time(0, 0, 0, 0))

详细代码:
util封装的log方法

def get_logger():
    import logging
    import logging.handlers
    import datetime

    logger = logging.getLogger('mylogger')
    logger.setLevel(logging.DEBUG)
    path = os.path.dirname(os.path.dirname(__file__)) + '\\logs'
    rf_handler = logging.handlers.TimedRotatingFileHandler(path+'\\all.log', when='midnight', interval=1, backupCount=7,
                                                           atTime=datetime.time(0, 0, 0, 0))
    rf_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))

    f_handler = logging.FileHandler(path+'\\error.log')
    f_handler.setLevel(logging.ERROR)
    f_handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(filename)s[:%(lineno)d] - %(message)s"))

    logger.addHandler(rf_handler)
    logger.addHandler(f_handler)
    return logger

修改后

from time import sleep
import unittest
import pytest
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from util import util


import pyautogui  #通过定位坐标来找到元素

class TestUserLogin(object):

    #改成setup
    @classmethod
    def setup_class(cls):
        cls.driver = webdriver.Chrome()
        cls.driver.get('http://localhost:8080/jpress/admin/login')
        cls.driver.maximize_window()
        cls.logger = util.get_logger() #初始化方法
        cls.logger.info('测试用户登录')

    # def __init__(self):
    #     self.driver = webdriver.Chrome()
    #     self.driver.get('http://localhost:8080/jpress/admin/login')
    #     self.driver.maximize_window()

    # 测试用户登录,用户名错误
    def test01_user_login_username_error(self):
        # 用户名为空
        username = ''  #实际正确的是root
        pwd = 'root'
        expected = '信息提交错误'

        # 输入用户名
        self.driver.find_element_by_name('username').send_keys(username)
        self.logger.debug('输入用户名称:%s', username)
        # 输入密码
        self.driver.find_element_by_name('password').send_keys(pwd)
        self.logger.debug('输入密码:%s', pwd)
        #勾选复选框(必须要用坐标定位)
        elem=self.driver.find_element_by_xpath('//*[@id="loginform"]/div[3]/div[1]/div/label/input')
        print(elem.rect)  # 找到该坐标打印一下
        rect = elem.rect
        pyautogui.moveTo(rect['x'] + 10, rect['y'] + 130)  # 10,130 就是移动像素
        pyautogui.click()
        # 点击登录
        self.driver.find_element_by_class_name('btn').click()
        self.logger.debug('点击登录')

        # 等待提示框
        WebDriverWait(self.driver, 5).until(EC.alert_is_present())
        alert = self.driver.switch_to.alert

        print(alert.text)

        sleep(3)
        # 验证不通过肯定执行后面的日志
        try:
            assert alert.text == expected+'12!'
        except AssertionError as ae:
            self.logger.error("老郭,老郭:%s", "报错了", exc_info=1)
        alert.accept()



        # self.driver.quit()




    # 测试用户登录成功
    #为了后面的依赖关系
    @pytest.mark.dependency(name='admin_login')
    def test02_user_login_ok(self):
        username = 'root'
        pwd = 'root'
        expected = 'JPress'

        # 输入用户名
        self.driver.find_element_by_name('username').clear()#为了把上面案例输入的值清空
        self.driver.find_element_by_name('username').send_keys(username)
        #加上日志
        self.logger.debug('输入用户名称:%s', username)
        # 输入密码
        self.driver.find_element_by_name('password').clear()
        self.driver.find_element_by_name('password').send_keys(pwd)
        self.logger.debug('密码:%s', pwd)
        # 点击登录
        self.driver.find_element_by_class_name('btn').click()
        self.logger.debug('等待登录')

        # 等待提示框
        WebDriverWait(self.driver, 5).until(EC.title_is(expected))

        sleep(3)
        #验证 因为没有弹窗  所以用到了title断言判断
        assert self.driver.title == expected

    # @classmethod
    # def teardown_class(cls):
    #     cls.driver.quit()



if __name__ == '__main__':
    pytest.main(['-sv','test_user_login.py'])

运行结果:

2021-01-08 15:09:28,372 - DEBUG - debug message
2021-01-08 15:09:28,373 - INFO - info message
2021-01-08 15:09:28,373 - WARNING - warning message
2021-01-08 15:09:28,373 - ERROR - error message
2021-01-08 15:09:28,374 - CRITICAL - critical message
2021-01-08 15:11:03,844 - INFO - 测试用户登录
2021-01-08 15:11:04,062 - DEBUG - 输入用户名称:
2021-01-08 15:11:04,205 - DEBUG - 输入密码:root
2021-01-08 15:11:04,573 - DEBUG - 点击登录
2021-01-08 15:11:08,362 - DEBUG - 输入用户名称:root
2021-01-08 15:11:08,699 - DEBUG - 密码:root
2021-01-08 15:11:08,760 - DEBUG - 等待登录
2021-01-08 15:16:29,351 - INFO - 测试用户登录
2021-01-08 15:16:29,576 - DEBUG - 输入用户名称:
2021-01-08 15:16:29,767 - DEBUG - 输入密码:root
2021-01-08 15:16:30,142 - DEBUG - 点击登录
2021-01-08 15:16:33,659 - ERROR - 老郭,老郭:报错了
Traceback (most recent call last):
  File "C:\Users\Administrator\pythonxiangmu\seelenium_project\testcases\log\test_user_login.py", line 60, in test01_user_login_username_error
    assert alert.text == expected+'12!'
AssertionError: assert '信息提交错误' == '信息提交错误12!'
2021-01-08 15:16:33,938 - DEBUG - 输入用户名称:root
2021-01-08 15:16:34,156 - DEBUG - 密码:root
2021-01-08 15:16:34,218 - DEBUG - 等待登录

其他的都是一样的运用就不过多叙述了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值