python➕selenium做UI自动化测试框架源码
时间: 2025-05-21 07:10:32 浏览: 36
### Python Selenium UI 自动化测试框架源码示例
以下是基于Python和Selenium构建的一个简单UI自动化测试框架的源码示例。此框架包括基本的目录结构、配置文件读取功能以及测试用例执行逻辑。
#### 1. 框架目录结构
```plaintext
ui_automation_framework/
├── config/
│ └── settings.ini # 配置文件,存储环境变量等信息
├── pages/ # 页面对象模式实现页面操作封装
│ ├── base_page.py # 基础页面类
│ └── login_page.py # 登录页面具体实现
├── tests/ # 测试用例模块
│ └── test_login.py # 登录用例
├── utils/ # 工具函数集合
│ └── browser_manager.py # 浏览器管理工具
├── run.py # 执行入口脚本
└── requirements.txt # 项目依赖库列表
```
---
#### 2. `base_page.py` 文件内容
基础页面类用于提供通用的操作方法。
```python
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class BasePage:
def __init__(self, driver):
self.driver = driver
def find_element(self, locator, timeout=10):
"""查找单个元素"""
return WebDriverWait(self.driver, timeout).until(
EC.presence_of_element_located(locator)
)
def click(self, locator):
"""点击操作"""
element = self.find_element(locator)
element.click()
def send_keys(self, locator, text):
"""输入文本"""
element = self.find_element(locator)
element.clear()
element.send_keys(text)
```
[^1]
---
#### 3. `login_page.py` 文件内容
登录页面的具体实现。
```python
from pages.base_page import BasePage
class LoginPage(BasePage):
username_input = (By.ID, 'username')
password_input = (By.ID, 'password')
submit_button = (By.XPATH, '//button[@type="submit"]')
def enter_username(self, username):
self.send_keys(self.username_input, username)
def enter_password(self, password):
self.send_keys(self.password_input, password)
def submit_form(self):
self.click(self.submit_button)
```
[^2]
---
#### 4. `browser_manager.py` 文件内容
浏览器初始化与关闭管理。
```python
import os
from selenium import webdriver
def get_driver(browser_name='chrome'):
if browser_name.lower() == 'chrome':
options = webdriver.ChromeOptions()
if os.getenv('HEADLESS', False): # 支持无头模式启动
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
elif browser_name.lower() == 'firefox':
driver = webdriver.Firefox()
else:
raise ValueError(f"Unsupported browser: {browser_name}")
driver.maximize_window()
return driver
```
[^5]
---
#### 5. `run.py` 文件内容
测试用例执行入口。
```python
import argparse
from selenium import webdriver
from pages.login_page import LoginPage
def main(env='test', report='allure', driver_type='chrome-headless'):
# 初始化驱动
is_headless = True if '-headless' in driver_type else False
os.environ['HEADLESS'] = str(is_headless)
driver = get_driver(driver_type.split('-')[0])
try:
# 访问目标URL并完成登录流程
url = f"http://example.com/{env}"
driver.get(url)
login_page = LoginPage(driver)
login_page.enter_username("admin")
login_page.enter_password("password123")
login_page.submit_form()
# TODO: 添加更多测试逻辑...
finally:
# 关闭浏览器实例
driver.quit()
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Run UI Automation Tests.")
parser.add_argument("-env", default="test", help="Environment to run the tests against")
parser.add_argument("-report", default="allure", help="Type of report to generate")
parser.add_argument("-driver", default="chrome-headless", help="Browser type and mode")
args = parser.parse_args()
main(args.env, args.report, args.driver)
```
[^4]
---
#### 6. 安装依赖
在开始运行之前,请确保已安装所需的依赖项:
```bash
pip install -r requirements.txt
```
其中 `requirements.txt` 的内容如下:
```plaintext
selenium==4.8.0
pytest==7.2.0
allure-pytest==2.9.47
```
---
#### 7. 运行方式
可以通过以下命令运行测试用例:
```bash
python run.py -env=test -report=allure -driver=chrome-headless
```
---
###
阅读全文
相关推荐




















