首页 > 运维 > linux运维 > 正文

4.UI自动化测试框架搭建-文件结构

蓮花仙者
发布: 2025-07-15 10:38:26
原创
971人浏览过

在创建和组织ui自动化测试框架时,根据上述结构设置好文件和文件夹后,我们需要将之前编写的元素操作放置在utils文件夹中,yaml文件放置在data文件夹中。同时,还需要将不同操作系统driver文件和allure报告工具放置在tools文件夹中。以下是详细的伪原创指南:

首先,根据给定的项目结构,创建好相应的文件夹和文件。将元素操作代码放到utils文件夹中,将yaml文件存放于data文件夹中。这些文件的组织方式确保了代码和数据的清晰分离,方便后续的维护和管理。

对于UI测试,需确保浏览器能正常打开。将不同操作系统所需的driver文件放到tools文件夹中。此外,为了生成测试报告,还需要下载allure.zip,解压后将文件也放置在tools文件夹中。完成这些步骤后,文件夹结构将如下所示:

4.UI自动化测试框架搭建-文件结构

随着项目规模的扩大,常量文件中的内容也会增加。为此,我们需要在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有三种设置方式:noneeagernormal。在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文件:

白瓜面试
白瓜面试

白瓜面试 - AI面试助手,辅助笔试面试神器

白瓜面试 40
查看详情 白瓜面试
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中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号