UI自动化框架

UI自动化框架

basePage类

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains


class Page(object):
    #定位元素方法对应信息
    methods = {
        'css': By.CSS_SELECTOR,
        'tag_name': By.TAG_NAME,
        'link_text': By.LINK_TEXT,
        'partial_link_text': By.PARTIAL_LINK_TEXT,
        'class_name': By.CLASS_NAME,
        'id': By.ID,
        'xpath': By.XPATH,
        'name': By.NAME,
    }

    def __init__(self, driver, timeout=20):
        self.driver = driver
        self.timeout = timeout
    #
    # def __del__(self):
    #     self.driver.close()

    def wait(self, loaction, method):
        '显示等待元素出现'
        try:
            WebDriverWait(self.driver, self.timeout).until(
                EC.presence_of_element_located((self.methods[method], loaction))
            )
        except NoSuchElementException as e:
            raise e

    def setWindowSize(self, length, wide):
        '设置窗口大小'
        self.driver.set_window_size(length, wide)

    def setMaxWindowSize(self):
        '浏览器最大化'
        self.driver.maximize_window()

    def back(self):
        '返回上一网页'
        self.driver.back()

    def forward(self):
        '返回下一网页'
        self.driver.forward()

    def refresh(self):
        '刷新当前网页'
        self.driver.refresh()

    def get(self, url):
        '''
        访问链接
        :param url:
        :return:
        '''
        self.setWindowSize(1200, 800)
        self.driver.get(url)

    def findElement(self, loaction, method):
        '''
        查找元素,返回单个元素
        :param loaction:
        :param method: 方式,包括:
        {
            'css': 'find_element_by_css_selector',
            'tag_name': 'find_element_by_tag_name',
            'link_text': 'find_element_by_link_text',
            'partial_link_text': 'find_element_by_partial_link_text',
            'class_name': 'find_element_by_class_name',
            'id': 'find_element_by_id',
            'xpath': 'find_element_by_xpath',
            'name': 'find_element_by_name',
        }
        :return:
        '''
        way = self.methods[method]
        self.wait(loaction, way)  # 等待元素出现
        return self.driver.find_element(way, loaction)

        # if method == 'css':
        #     return self.driver.find_element_by_css_selector(loaction)
        # elif method == 'tag_name':
        #     return self.driver.find_element_by_tag_name(loaction)
        # elif method == 'link_text':
        #     return self.driver.find_element_by_link_text(loaction)
        # elif method == 'partial_link_text':
        #     return self.driver.find_element_by_partial_link_text(loaction)
        # elif method == 'class_name':
        #     return self.driver.find_element_by_class_name(loaction)
        # elif method == 'id':
        #     return self.driver.find_element_by_id(loaction)
        # elif method == 'xpath':
        #     return self.driver.find_element_by_xpath(loaction)
        # elif method == 'name':
        #     return self.driver.find_element_by_name(loaction)

    def input(self, text, *args, **kwargs):
        '''
        输入信息
        :param *args: 输入框定位信息
        :param text:待输入内容
        :return:
        '''
        self.findElement(*args, **kwargs).send_keys(text)

    def clear(self, *args, **kwargs):
        '''
        清空输入框内容
        :param args:
        :param kwargs:
        :return:
        '''
        self.findElement(*args, **kwargs).clear()

    def click(self, *args, **kwargs):
        '''
        点击操作
        :param args:
        :return:
        '''
        self.findElement(*args, **kwargs).click()

    def moveToElement(self, *args, **kwargs):
        '''
        鼠标移动到元素
        '''
        element = self.findElement(*args, **kwargs)
        ActionChains(self.driver).move_to_element(element).perform()

    def doubleClick(self, *args, **kwargs):
        '''
        鼠标双击,如果无指定元素则双击鼠标当前位置
        :param args:
        :param kwargs:
        :return:
        '''
        if args:
            element = self.findElement(*args, **kwargs)
        else:
            element =None

        ActionChains(self.driver).double_click(on_element=element)

    def singleClick(self, *args, **kwargs):
        '''
        鼠标单击,如果无指定元素则单击鼠标当前位置
        :param args:
        :param kwargs:
        :return:
        '''
        if args:
            element = self.findElement(*args, **kwargs)
        else:
            element = None

        ActionChains(self.driver).click(on_element=element)

    def dragMouse(self, source, targe):
        '''
        拖拽元素source到target位置
        :param source: 目标元素
        :param targe: 目标位置
        :return:
        '''
        ActionChains(self.driver).drag_and_drop(source=source, target=targe)

    def clickAble(self, loaction, method):
        try:
            WebDriverWait(self.driver, self.timeout).until(
                EC.element_to_be_clickable((self.methods[method], loaction))
            )
        except Exception as e:
            raise e


if __name__ == '__main__':
    browser = webdriver.Chrome()

    p = Page(browser)
    p.doubleClick()
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值