- 创建了基本的项目结构 - 添加了 .gitignore 文件 - 配置了基本的开发环境 - 添加清华镜像源 - 设置了基础的文件夹和文件(如 commons, utils, POM, pytest.ini) 项目说明: - [项目名称]:Web自动化测试 - [项目描述]:基于pytest,selenium的自动化测试工具 - [开发环境]:Python
100 lines
2.2 KiB
Python
100 lines
2.2 KiB
Python
#!/usr/bin/env python
|
||
# coding=utf-8
|
||
|
||
"""
|
||
@author: CNWei
|
||
@Software: PyCharm
|
||
@contact: t6i888@163.com
|
||
@file: expected_conditional_function
|
||
@date: 2025/4/4 14:15
|
||
@desc:
|
||
"""
|
||
import logging
|
||
from dataclasses import dataclass
|
||
from typing import Dict, Callable, TypeVar, Tuple
|
||
from typing import Literal
|
||
from typing import Optional
|
||
from typing import Union
|
||
|
||
from selenium.webdriver.remote.webdriver import WebDriver
|
||
from selenium.webdriver.remote.webdriver import WebElement
|
||
|
||
from selenium.webdriver.support import expected_conditions as EC
|
||
|
||
__all__ = ["EC","custom_ec"]
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
T = TypeVar("T")
|
||
WebDriverOrWebElement = Union[WebDriver, WebElement]
|
||
|
||
|
||
"""
|
||
常用等待条件(expected_conditions)--来自EC模块
|
||
presence_of_element_located: 元素存在于DOM。
|
||
visibility_of_element_located: 元素可见。
|
||
element_to_be_clickable: 元素可点击。
|
||
title_contains: 页面标题包含特定文本。
|
||
text_to_be_present_in_element: 元素包含特定文本。
|
||
"""
|
||
# 自定义预期条件(Custom Expected Condition)
|
||
custom_ec = {
|
||
|
||
}
|
||
|
||
|
||
def register(name: str | None = None):
|
||
def decorator(func):
|
||
if name is not None:
|
||
custom_ec[name] = func
|
||
|
||
custom_ec[func.__name__] = func
|
||
return func
|
||
|
||
return decorator
|
||
|
||
|
||
@register()
|
||
def examples_no_parameters(driver: WebDriverOrWebElement)->T:
|
||
"""
|
||
无参预期条件函数
|
||
driver
|
||
- WebDriver的实例(Ie、Firefox、Chrome或远程)或 一个WebElement
|
||
- driver形参不可省略,即使不使用
|
||
:return:
|
||
"""
|
||
_ = driver
|
||
list_ = [1, 2, 3, 4, 5, 6]
|
||
for item in list_:
|
||
logger.info(item)
|
||
if item == 5:
|
||
return item
|
||
|
||
@register()
|
||
def examples_have_parameters(locator: Tuple[str, str]) -> Callable[[WebDriverOrWebElement], Union[Literal[False], WebElement]]:
|
||
"""
|
||
有参预期条件函数(暂不支持)
|
||
:param locator:
|
||
:return:
|
||
"""
|
||
def _predicate(driver: WebDriverOrWebElement):
|
||
try:
|
||
|
||
return driver.find_element(*locator)
|
||
except Exception as e:
|
||
|
||
return False
|
||
|
||
return _predicate
|
||
|
||
def func_3(mark):
|
||
...
|
||
|
||
|
||
def func_4(mark):
|
||
...
|
||
|
||
|
||
if __name__ == "__main__":
|
||
print(custom_ec)
|