在创建和组织ui自动化测试框架时,根据上述结构设置好文件和文件夹后,我们需要将之前编写的元素操作放置在utils文件夹中,yaml文件放置在data文件夹中。同时,还需要将不同操作系统的driver文件和allure报告工具放置在tools文件夹中。以下是详细的伪原创指南:
首先,根据给定的项目结构,创建好相应的文件夹和文件。将元素操作代码放到utils文件夹中,将yaml文件存放于data文件夹中。这些文件的组织方式确保了代码和数据的清晰分离,方便后续的维护和管理。
对于UI测试,需确保浏览器能正常打开。将不同操作系统所需的driver文件放到tools文件夹中。此外,为了生成测试报告,还需要下载allure.zip,解压后将文件也放置在tools文件夹中。完成这些步骤后,文件夹结构将如下所示:

随着项目规模的扩大,常量文件中的内容也会增加。为此,我们需要在utils文件夹中创建一个constant.py文件,用于快速获取项目中的路径。首先,通过os.path.abspath(__file__)获取当前文件的绝对路径,然后使用os.path.dirname(path)获取其上一层路径,重复三次即可获得项目根路径:
BASE_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
接下来,使用os.path.join()方法拼接路径,以方便访问项目中的各个文件夹:
import os BASE_PATH = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) BASE_DATA_PATH = os.path.join(BASE_PATH, 'data') SRC_PATH = os.path.join(BASE_PATH, 'src') TOOL_PATH = os.path.join(SRC_PATH, 'tools') ALLURE_TOOL_PATH = os.path.join(TOOL_PATH, 'allure-2.14.0/bin')
在测试过程中,可能需要创建一些临时文件夹来存储日志和报告等文件。我们可以通过检查这些文件夹是否存在,如果不存在则创建它们:
LOG_PATH = os.path.join(BASE_PATH, 'log')
REPORT_PATH = os.path.join(BASE_PATH, 'report')
TEST_PIC = os.path.join(REPORT_PATH, 'test_pic')
for i in [LOG_PATH, REPORT_PATH, TEST_PIC]:
if not os.path.exists(i):
os.mkdir(i)通过constant.py文件,我们可以轻松获取项目中的路径。现在,我们可以使用绝对路径来访问driver文件,并通过desired_capabilities设置来优化浏览器的启动方式。desired_capabilities有三种设置方式:none、eager和normal。在UI自动化测试中,经常会遇到一些资源未加载完成的问题,这时可以将desired_capabilities设置为eager,以确保DOM加载完成后即可找到并操作元素:
from selenium.webdriver import DesiredCapabilities desired_capabilities = DesiredCapabilities.CHROME desired_capabilities["pageLoadStrategy"] = "eager" webdriver.Chrome(desired_capabilities=desired_capabilities)
为了确保浏览器在不同操作系统上都能正常运行,我们需要根据当前操作系统来选择相应的driver文件:
if platform.system() == "Windows":
driver_path = f'{TOOL_PATH}/driver/win/chromedriver'
elif platform.system() == "Linux":
driver_path = f'{TOOL_PATH}/driver/linux/chromedriver'
os.system(f"chmod -R 777 {driver_path}")
else:
driver_path = f'{TOOL_PATH}/driver/mac/chromedriver'
os.system(f"chmod -R 777 {driver_path}")对于没有图形界面的Linux系统,需要使用无头浏览器模式运行:
chrome_option = Options()
chrome_option.add_argument('--headless')
chrome_option.add_argument('--no-sandbox')
chrome_option.add_argument('--disable-gpu')
chrome_option.add_argument('--disable-dev-shm-usage')如果需要以H5方式运行测试,则需要修改浏览器的mobileEmulation配置:
chrome_option = Options()
chrome_option.add_experimental_option('mobileEmulation', {'deviceName': deviceName})
chrome_option.add_experimental_option('w3c', False)完整的浏览器启动代码应包含异常处理和兼容性处理,并在浏览器打开后最大化窗口:
try:
self.driver.maximize_window()
except Exception as e:
print(f"浏览器最大化失败:{e}")在操作过程中,如果需要切换到某个frame,可以使用以下代码:
def switch_frame(self, frame_locator):
self.driver.switch_to.default_content()
self.driver.switch_to.frame(frame_locator.element)最后,提供完整的浏览器打开函数,包含所有必要的参数和处理逻辑:
def open(self, url, locator, frame_locator=None, driver='chrome', deviceName='iPhone X'):
"""
:param url: 打开的地址
:param locator: 确认打开成功的元素
:param frame_locator: 需要切换的frame
:param driver: 浏览器驱动
:param deviceName: h5测试设备型号
:return:
"""
driver = driver.lower()
if driver in ['chrome', 'ie', 'chrome-h5']:
try:
socket.setdefaulttimeout(50)
if not self.driver:
if 'chrome' in driver:
desired_capabilities = DesiredCapabilities.CHROME
desired_capabilities["pageLoadStrategy"] = "eager"
chrome_option = Options()
if HEADLESS == 'true':
chrome_option.add_argument('--headless')
if driver == 'chrome-h5':
chrome_option.add_experimental_option('mobileEmulation', {'deviceName': deviceName})
chrome_option.add_experimental_option('w3c', False)
if platform.system() == "Windows":
driver_path = f'{TOOL_PATH}/driver/win/chromedriver'
elif platform.system() == "Linux":
chrome_option.add_argument('--headless')
chrome_option.add_argument('--no-sandbox')
chrome_option.add_argument('--disable-gpu')
chrome_option.add_argument('--disable-dev-shm-usage')
driver_path = f'{TOOL_PATH}/driver/linux/chromedriver'
os.system(f"chmod -R 777 {driver_path}")
else:
driver_path = f'{TOOL_PATH}/driver/mac/chromedriver'
os.system(f"chmod -R 777 {driver_path}")
logger.info(f'使用的chromedriver为「{driver_path}」。请确认版本是否与当前浏览器版本一致')
self.driver = webdriver.Chrome(executable_path=f'{driver_path}',
chrome_options=chrome_option,
desired_capabilities=desired_capabilities)
elif driver == 'ie':
ie_options = DesiredCapabilities.INTERNETEXPLORER # 将忽略IE保护模式的参数设置为True
ie_options['ignoreProtectedModeSettings'] = True # 忽略浏览器缩放设置
ie_options['ignoreZoomSetting'] = True # 启动带有自定义设置的IE浏览器
self.driver = webdriver.Ie(capabilities=ie_options)
time.sleep(2)
self.driver.get(url)
time.sleep(5)
try:
self.driver.maximize_window()
except Exception as e:
print(f"浏览器最大化失败:{e}")
if frame_locator:
self.wait_element_visible(frame_locator)
self.switch_frame(frame_locator)
if locator:
self.wait_element_visible(locator)
except Exception as e:
raise Exception(f"打开浏览器进入{url}失败:{e}")
self.wait_for(10)
return self.driver项目地址已在version_1分支中更新:
https://www.php.cn/link/cec819fa603e0b3f17e6aeaf4a6e6890
以上就是4.UI自动化测试框架搭建-文件结构的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号