zoukankan      html  css  js  c++  java
  • web自动化框架设计

    from time import sleep
    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException
    from selenium.webdriver import ActionChains
    from selenium.webdriver.ie.options import Options
    from selenium.webdriver.remote.webdriver import WebDriver
    from selenium.webdriver.remote.webelement import WebElement
    from selenium.webdriver.support import expected_conditions
    from selenium.webdriver.support.wait import WebDriverWait
    import sys


    # BasePage的定义是,它是一个其他page的公共方法的封装,它是一个底层使用的框架

    class BasePage:

    def __init__(self, driver_base_page: WebDriver = None):

    if driver_base_page is None:
    _driver_type = 'chrome'
    if _driver_type == 'chrome':
    self.driver = webdriver.Chrome()
    elif _driver_type == 'ie':
    cap = Options()
    cap.ignore_zoom_level = True
    self.driver = webdriver.Ie(options=cap)
    else:
    self.driver = driver_base_page
    # if self._base_url != '':
    # self.driver.get(self._base_url)
    # # 窗口最大化
    self.driver.maximize_window()

    # 添加隐式等待,判断元素是否加载到DOM
    self.driver.implicitly_wait(10)

    # 封装查找单个元素+显示等待6秒
    def _find(self, *locator) -> WebElement:
    # 优先先判断页面有没有加载等待的标识
    js1 = 'return document.getElementsByClassName("ant-spin-dot")'
    # 获取查询等待的标识
    ele = len(self.driver.execute_script(js1))
    while ele > 0: # 查询到等待标识则继续查询标识,直到标识消失
    ele = len(self.driver.execute_script(js1))
    WebDriverWait(self.driver, 5).until(lambda x: x.find_element(*locator), message="没有找到元素")
    return self.driver.find_element(*locator)

    # 封装多个元素查找方法
    def _finds(self, *locator) -> list[WebElement]:
    # 优先先判断页面有没有加载等待的标识
    js1 = 'return document.getElementsByClassName("ant-spin-dot")'
    # 获取查询等待的标识
    ele = len(self.driver.execute_script(js1))
    while ele > 0: # 查询到等待标识则继续查询标识,直到标识消失
    ele = len(self.driver.execute_script(js1))
    WebDriverWait(self.driver, 5).until(lambda x: x.find_element(*locator), message="没有找到元素")
    return self.driver.find_elements(*locator)

    # 查找元素后进行点击操作,仅用于鼠标左击
    def _click(self, *locator):
    # 优先先判断页面有没有加载等待的标识
    js1 = 'return document.getElementsByClassName("ant-spin-dot")'
    # 获取查询等待的标识
    ele = len(self.driver.execute_script(js1))
    while ele > 0: # 查询到等待标识则继续查询标识,直到标识消失
    ele = len(self.driver.execute_script(js1))
    WebDriverWait(self.driver, 5).until(lambda x: x.find_element(*locator), message="没有找到元素")
    try:
    WebDriverWait(self.driver, 3).until(
    expected_conditions.element_to_be_clickable(locator))
    self.driver.find_element(*locator).click()
    except TimeoutException:
    self.driver.find_element(*locator).click()

    def _select(self, *locator):
    WebDriverWait(self.driver, 5).until(lambda x: x.find_element(*locator), message="没有找到元素")
    element = self.driver.find_element(*locator)
    sleep(0.5)
    return element

    # 获取查询结果
    def _get_search_res(self, *locator):
    js1 = 'return document.getElementsByClassName("ant-spin-dot")'
    # 优先判断页面是否存在等待的标识
    ele = len(self.driver.execute_script(js1))
    while ele > 0: # 查询到等待标识则继续查询标识,直到标识消失
    ele = len(self.driver.execute_script(js1))
    else:
    # 因为查询结束后页面更新数据需要时间,强制等待1.5秒
    sleep(1.5)
    try:
    WebDriverWait(self.driver, 8).until(lambda x: x.find_element(*locator), message="没有找到元素")
    elements = self.driver.find_elements(*locator)
    except TimeoutException:
    elements = None
    return elements

    # 等待页面加载完成
    def _wait(self, time=0.5):
    js1 = 'return document.getElementsByClassName("ant-spin-dot")'
    # 获取查询等待的标识
    ele = len(self.driver.execute_script(js1))
    while ele > 0: # 查询到等待标识则继续查询标识,直到标识消失
    ele = len(self.driver.execute_script(js1))
    sleep(time)

    # 搜索后勾选一条数据(find)
    def _find_to_search_one(self, *locator):
    # 查询过程,等待查询动作完成才能去获取查询列表,所以对页面查询的是否存在查询等待的元素
    js1 = 'return document.getElementsByClassName("ant-spin-dot")'
    ele = len(self.driver.execute_script(js1))
    # 轮询查询等待的元素是否存在
    while ele > 0:
    ele = len(self.driver.execute_script(js1))
    else: # 元素不存在是说明查询结束了
    WebDriverWait(self.driver, 60, 0.5).until(
    expected_conditions.presence_of_element_located(locator))
    sleep(1)
    element = self.driver.find_element(*locator)
    return element

    # 鼠标左键双击
    def _double_ckick(self, *locator):
    # 获取目标元素
    ele_input = self.driver.find_element(*locator)
    ActionChains(self.driver).double_click(ele_input).perform() # 使用双击目标元素
    sleep(1)

    # 封装关闭浏览器,资源回收
    def quit(self):
    return self.driver.quit()


    if __name__ == "__main__":
    # print(sys.path)

    sys.path.append("E:\git\auto-test\fusion_fintrade\pages\login.py")
    print(sys.path)
  • 相关阅读:
    Redis 事务相关的命令有哪几个?
    是否了解字典树?
    memcached 是如何做身份验证的?
    memcached 和服务器的 local cache(比如 PHP 的 APC、 mmap 文件等)相比,有什么优缺点?
    memcached 如何处理容错的?
    memcached 的多线程是什么?如何使用它们?
    memcached 的内存分配器是如何工作的?为什么不适用 malloc/free!?为何要使用 slabs?
    memcached 如何实现冗余机制?
    memcached 最大能存储多大的单个 item?
    memcached 能接受的 key 的最大长度是多少?
  • 原文地址:https://www.cnblogs.com/zwldyt/p/15117929.html
Copyright © 2011-2022 走看看