pytest+selenium 设计基类
时间: 2024-10-29 09:19:44 浏览: 22
pytest和selenium通常一起用于测试Web应用程序,特别是那些依赖于浏览器功能的自动化测试。设计一个基于pytest和selenium的基类(Base Class),可以简化测试套件的编写并提供一些通用的功能。这样的基类可能会包含以下几个部分:
1. **初始化**:
- 初始化selenium webdriver(比如Chrome、Firefox等),并设置相关的配置选项,如窗口大小、等待时间等。
```python
def __init__(self, driver_path, browser='chrome'):
self.driver = webdriver.Chrome(driver_path)
self.wait = WebDriverWait(self.driver, 10) # 设置默认的等待时间
```
2. **打开和关闭浏览器**:
- 提供方法打开网页和结束测试会话。
```python
def open_url(self, url):
self.driver.get(url)
def close_driver(self):
self.driver.quit()
```
3. **断言和辅助方法**:
- 包含一些通用的断言函数,如检查元素存在、文本匹配等。
```python
def assert_element_exists(self, xpath):
assert self.wait.until(EC.presence_of_element_located((By.XPATH, xpath)))
def assert_text_content(self, element_xpath, expected_text):
actual_text = self.driver.find_element_by_xpath(element_xpath).text
assert actual_text == expected_text
```
4. **测试套件的起点和终点**:
- 提供开始测试和结束测试的钩子,方便子类定制额外的行为。
```python
def setup_method(self):
pass
def teardown_method(self):
self.close_driver()
```
5. **异常处理**:
- 异常捕获和报告,防止测试中断。
```python
@pytest.mark.tryfirst
def pytest_exception_interact(self, node, call, report):
if isinstance(call.excinfo.value, NoSuchElementException):
self.driver.quit()
```
通过这种方式,子类只需要关注特定页面或操作的测试逻辑,而基础功能由基类处理,提高了代码的复用性和维护性。
阅读全文