unittest框架实战(三)

来源:互联网 发布:宇宙几维 知乎 编辑:程序博客网 时间:2024/05/21 14:41
#coding=utf-8

import os, time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from Driver import My_driver
from selenium.webdriver.support.select import Select

class My_page(object):
    '''页面基本的元素操作
        包括:点击, 输入, iframe, wait
    '''
    def __init__(self, driver):
        self.driver = driver

    def Click(self, *loc):
        # 点击元素
        return self._Wait_Run(self._click, *loc)

    def Input(self, text, *loc):
        # 输入text
        return self._Wait_Run(self._input, text, *loc)

    def Select_List(self, text, *loc):
        # 根据text去选择下拉框内容, text为下拉框里的值
        return self._Wait_Run(self._select_list, text, *loc)

    def Element(self, *loc):
        # 定位单个元素
        return self._Wait_Run(self._element, *loc)

    def Elements(self, *loc):
        # 定位多个元素
        return self._Wait_Run(self._elements, *loc)

    def Iframe(self, *loc):
        # 进入iframe
        return self._Wait_Run(self._iframe, *loc)

    def DisIframe(self):
        # 退出iframe
        return self._Wait_Run(self._disiframe)

    def Switch_alert(self):
        '''获取弹出框内容'''
        return self._Wait_Run(self._switch_alert)

    def Exit_alert(self):
        '''释放弹出框'''
        return slef._Wait_Run(self._exit_alert)

    def _click(self, *loc):
        # 点击元素
        return self.driver.find_element(*loc).click()

    def _input(self, text, *loc):
        # 输入字符串
        return self.driver.find_element(*loc).send_keys(text)

    def _select_list(self, text, *loc):
        # 下拉框
        return Select(self.driver.find_element(*loc)).select_by_visible_text(text)

    def _element(self, *loc):
        # 定位单个元素
        return self.driver.find_element(*loc)

    def _elements(self, *loc):
        # 定位多个元素, 以list的方式返回
        return self.driver.find_elements(*loc)

    def _iframe(self, *loc):
        # 进入iframe
        return self.driver.switch_to.frame(self._element(*loc))

    def _disiframe(self):
        # 释放Iframe
        return self.driver.switch_to_default_content()

    def close_process(self, process_name='chromedriver.exe'):
        '''
        --------------------
        |杀死进程,主要用来杀死chromedriver.exe的进程
        |浏览器每一次的调用都会启用一次Chromedriver
        ||根据名称去杀死进程
        '''
        if process_name[-4:].lower() != '.exe':
            process_name += '.exe'
        os.system('taskkill /f /im ' + process_name)

    def _Run(self, name, *args):
        '''|运行方法
            |函数当做参数去传递
        '''
        return name(*args)

    def _Wait_Run(self, name, *args):
        '''
        ||由时间来控制函数的运行
        |操作完成后直接return,结束函数
        |超过时间限制的时候跳出循环,return 结束函数
        '''
        endtime = time.time() + float(5)
        while True:
            try:
                return self._Run(name, *args)
            except BaseException as e:
                print 'Your Fail: %s' % e
            remaining = endtime - time.time()
            if remaining <= 0:
                raise
            time.sleep(min(remaining, 0.01))
            errors_text = '现在的时间 %s, 你剩余的运行时间 %s' %(time.strftime('%Y-%m-%d %H:%M:%S'), remaining)
            print errors_text

    def _switch_alert(self):
        '''获取弹出框内容'''
        return self.driver.switch_to.alert.text

    def _exit_alert(self):
        '''释放弹出框'''
        return self.driver.dismiss()

_Wait_Run()该方法之前有说过就不多说了

close_process()这个方法是用来杀死driver驱动的方法,可以放在tearDown()方法中,每次执行完成一个用例就去杀死一次,要不然driver.exe在windwos上会越来越多,造成电脑卡死

_iframe()用来封装driver.switch_to.frame()方法,该方法的定位方式比较少,可以通过获取driver.find_element()定位去定位,可以使用多种定位方式

原创粉丝点击