问题描述
所以我正在使用 python 和 selenium 来提高我的测试自动化技能。我创建了一个示例框架并不断扩展它 - https://github.com/adrian-rutkowski/herokuapp-automation。
我的框架有一个日志实用程序,可以将消息记录到文件中。今天,当我将日志添加到 conftest.py 文件以记录打开和关闭浏览器并运行 6 个测试套件时,我注意到以下内容:
30-01-2021 15:28:13 - setup - INFO: Open Firefox browser.
30-01-2021 15:28:18 - DraganddropPage - DEBUG: Element found with locator: [xpath] //a[normalize-space()='Drag and Drop']
30-01-2021 15:28:18 - DraganddropPage - DEBUG: Clicked on element.
30-01-2021 15:28:18 - DraganddropPage - INFO: Open the page.
30-01-2021 15:28:20 - DraganddropPage - DEBUG: Element found with locator: [xpath] //div[@id='column-a']
30-01-2021 15:28:20 - DraganddropPage - DEBUG: Element found with locator: [xpath] //div[@id='column-b']
30-01-2021 15:28:21 - DraganddropPage - DEBUG: Drag and drop successful.
30-01-2021 15:28:21 - DraganddropPage - INFO: Drag A to B.
30-01-2021 15:28:23 - setup - INFO: Close browser.
30-01-2021 15:28:30 - setup - INFO: Open Firefox browser.
30-01-2021 15:28:30 - setup - INFO: Open Firefox browser.
30-01-2021 15:28:35 - DropdownPage - DEBUG: Element found with locator: [xpath] //a[contains(text(),'Dropdown')]
30-01-2021 15:28:36 - DropdownPage - DEBUG: Clicked on element.
30-01-2021 15:28:36 - DropdownPage - INFO: Open the page.
30-01-2021 15:28:39 - DropdownPage - DEBUG: Element found with locator: [xpath] //select[@id='dropdown']
30-01-2021 15:28:39 - DropdownPage - DEBUG: Dropdown found.
30-01-2021 15:28:39 - DropdownPage - DEBUG: Dropdown value selected by visible text: Option 2
30-01-2021 15:28:39 - DropdownPage - INFO: Select dropdown value: Option 2
30-01-2021 15:28:42 - setup - INFO: Close browser.
30-01-2021 15:28:42 - setup - INFO: Close browser.
30-01-2021 15:28:49 - setup - INFO: Open Firefox browser.
30-01-2021 15:28:49 - setup - INFO: Open Firefox browser.
30-01-2021 15:28:49 - setup - INFO: Open Firefox browser.
30-01-2021 15:28:53 - HomePage - INFO: Verify element present.
30-01-2021 15:28:53 - HomePage - DEBUG: Element found with locator: [xpath] //a[normalize-space()='A/B Testing']
30-01-2021 15:28:53 - HomePage - DEBUG: Element is present.
30-01-2021 15:28:55 - HomePage - INFO: Verify element displayed.
30-01-2021 15:28:56 - HomePage - DEBUG: Element found with locator: [xpath] //a[normalize-space()='Add/Remove Elements']
30-01-2021 15:28:56 - HomePage - DEBUG: Element is displayed.
30-01-2021 15:28:58 - setup - INFO: Close browser.
30-01-2021 15:28:58 - setup - INFO: Close browser.
30-01-2021 15:28:58 - setup - INFO: Close browser.
30-01-2021 15:29:05 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:05 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:05 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:05 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:11 - HoversPage - DEBUG: Element found with locator: [xpath] //a[normalize-space()='Hovers']
30-01-2021 15:29:11 - HoversPage - DEBUG: Clicked on element.
30-01-2021 15:29:11 - HoversPage - INFO: Open the page.
30-01-2021 15:29:14 - HoversPage - DEBUG: Element found with locator: [xpath] //div[@class='example']//div[1]//img[1]
30-01-2021 15:29:14 - HoversPage - DEBUG: Hovered over the parent element.
30-01-2021 15:29:14 - HoversPage - DEBUG: Element found with locator: [xpath] //div[@class='example']//div[1]//div[1]//a[1]
30-01-2021 15:29:15 - HoversPage - DEBUG: Clicked on child element.
30-01-2021 15:29:15 - HoversPage - INFO: Open user profile.
30-01-2021 15:29:18 - setup - INFO: Close browser.
30-01-2021 15:29:18 - setup - INFO: Close browser.
30-01-2021 15:29:18 - setup - INFO: Close browser.
30-01-2021 15:29:18 - setup - INFO: Close browser.
30-01-2021 15:29:25 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:25 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:25 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:25 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:25 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:29 - IframePage - DEBUG: Element found with locator: [xpath] //a[normalize-space()='WYSIWYG Editor']
30-01-2021 15:29:31 - IframePage - DEBUG: Clicked on element.
30-01-2021 15:29:31 - IframePage - INFO: Open the page.
30-01-2021 15:29:33 - IframePage - DEBUG: Entering the iframe using ID: mce_0_ifr
30-01-2021 15:29:33 - IframePage - INFO: Enter iFrame.
30-01-2021 15:29:35 - IframePage - DEBUG: Element found with locator: [xpath] //body
30-01-2021 15:29:35 - IframePage - DEBUG: Field clear.
30-01-2021 15:29:35 - IframePage - DEBUG: Element found with locator: [xpath] //body
30-01-2021 15:29:35 - IframePage - DEBUG: Sent data on element.
30-01-2021 15:29:35 - IframePage - INFO: Enter text.
30-01-2021 15:29:37 - IframePage - DEBUG: Switching back to default content.
30-01-2021 15:29:37 - IframePage - INFO: Exit the iFrame.
30-01-2021 15:29:39 - IframePage - DEBUG: Element found with locator: [xpath] //a[normalize-space()='Elemental Selenium']
30-01-2021 15:29:39 - IframePage - DEBUG: Clicked on element.
30-01-2021 15:29:39 - IframePage - INFO: Click on elemental selenium link to prove that frame changed.
30-01-2021 15:29:41 - setup - INFO: Close browser.
30-01-2021 15:29:41 - setup - INFO: Close browser.
30-01-2021 15:29:41 - setup - INFO: Close browser.
30-01-2021 15:29:41 - setup - INFO: Close browser.
30-01-2021 15:29:41 - setup - INFO: Close browser.
30-01-2021 15:29:48 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:48 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:48 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:48 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:48 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:48 - setup - INFO: Open Firefox browser.
30-01-2021 15:29:52 - JsalertPage - DEBUG: Element found with locator: [xpath] //a[normalize-space()='JavaScript Alerts']
30-01-2021 15:29:52 - JsalertPage - DEBUG: Clicked on element.
30-01-2021 15:29:52 - JsalertPage - INFO: Open the page.
30-01-2021 15:29:54 - JsalertPage - DEBUG: Element found with locator: [xpath] //button[normalize-space()='Click for JS Alert']
30-01-2021 15:29:54 - JsalertPage - DEBUG: Clicked on element.
30-01-2021 15:29:54 - JsalertPage - INFO: Open JS alert.
30-01-2021 15:29:56 - JsalertPage - DEBUG: JavaScript alert accepted.
30-01-2021 15:29:56 - JsalertPage - INFO: Click OK on JS alert.
30-01-2021 15:29:58 - JsalertPage - DEBUG: Element found with locator: [xpath] //button[normalize-space()='Click for JS Confirm']
30-01-2021 15:29:58 - JsalertPage - DEBUG: Clicked on element.
30-01-2021 15:29:58 - JsalertPage - INFO: Open JS confirm.
30-01-2021 15:30:00 - JsalertPage - DEBUG: JavaScript alert dismissed.
30-01-2021 15:30:00 - JsalertPage - INFO: Click CANCEL on JS alert.
30-01-2021 15:30:02 - setup - INFO: Close browser.
30-01-2021 15:30:02 - setup - INFO: Close browser.
30-01-2021 15:30:02 - setup - INFO: Close browser.
30-01-2021 15:30:02 - setup - INFO: Close browser.
30-01-2021 15:30:02 - setup - INFO: Close browser.
30-01-2021 15:30:02 - setup - INFO: Close browser.
如您所见,消息 setup - INFO: Open Firefox browser.
和 setup - INFO: Close browser.
被写入 X 次,其中 X 是正在运行的测试用例的编号(例如,在第 6 次测试之后,消息被写入 6 次!).
conftest.py
from selenium import webdriver
import pytest
import allure
from utilities import logger
import logging
from allure_commons.types import AttachmentType
def pytest_addoption(parser):
parser.addoption(
"--browser",action="store",default="firefox")
@pytest.fixture()
def setup(request):
log = logger.log_util(logging.DEBUG)
browser = request.config.getoption("--browser")
base_url = "https://the-internet.herokuapp.com/"
if browser.lower() == "firefox":
driver = webdriver.Firefox()
log.info("Open Firefox browser.")
elif browser.lower() == "chrome":
driver = webdriver.Chrome()
log.info("Open Chrome browser.")
driver.maximize_window()
driver.get(base_url)
request.cls.driver = driver
before_Failed = request.session.testsFailed
yield
if request.session.testsFailed != before_Failed:
allure.attach(driver.get_screenshot_as_png(),name="Test Failed",attachment_type=allure.attachment_type.PNG)
log.info("Close browser.")
driver.quit()
logger.py
import inspect
import logging
from datetime import datetime
def log_util(logLevel=logging.DEBUG):
# Gets the name of the class / method from where this method is called
logger_name = inspect.stack()[1][3]
logger = logging.getLogger(logger_name)
# By default,log all messages
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler('C:\\Users\\adrian.rutkowski\\PycharmProjects\\herokuapp-automation\\logs\\automation {:%d-%m-%Y}.log'.format(datetime.Now()),mode='a')
fh.setLevel(logLevel)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s: %(message)s',datefmt='%d-%m-%Y %H:%M:%s')
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
有人知道这种不良行为的原因是什么吗?我需要每次测试只写一次这些消息。非常感谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)