zoukankan      html  css  js  c++  java
  • 自动化测试框架中关于selenium api的二次封装

    不多说,直接看代码如下:

    from selenium import  webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    
    class webutils():
    
        def __init__(self, browser='firefox'):
            '''
            :param browser:   浏览器对象
            :return:
            '''
            if browser == "firefox" :
                driver = webdriver.Firefox()
            elif browser == "chrome":
                driver = webdriver.Chrome()
            elif browser == "ie" :
                DesiredCapabilities.INTERNETEXPLORER['ignoreProtectedModeSettings'] = True
                driver = webdriver.Ie("../resources/drivers/IEDriverServer.exe")
            elif browser == "phantomjs":
                driver = webdriver.PhantomJS()
            try:
                self.driver = driver
            except Exception:
                raise NameError("Not found this browser,You can enter 'firefox', 'chrome', 'ie' or 'phantomjs'.")
    
    
    
        def getElement(self,by,value):
            '''
    
            :param by:     查找元素的方式
            :param value:  文本值
            :return:       查找到的元素
            '''
            if by=="id":
                return self.driver.find_element_by_id(value)
            elif by=="class":
                return self.driver.find_element_by_class_name(value)
            elif by=="name":
                return self.driver.find_element_by_name(value)
            elif by=="css":
                return self.driver.find_element_by_css_selector(value)
            elif by=="linktext":
                return self.driver.find_element_by_link_text(value)
            elif by=="partcialtext":
                return self.driver.find_element_by_partial_link_text(value)
            elif by=="tag":
                return self.driver.find_element_by_tag_name(value)
            elif by=='xpath':
                return self.driver.find_element_by_xpath(value)
            elif by=='js'or by=="jquery":
                return self.ExcuteJs(value)
            else:
                print ("请输入适合的查找元素方式。。。")
    
        def ExcuteJs(self,js):
            '''
    
            :param js:  js查找元素方式,或jQuery
            :return:    找到元素
            '''
            self.driver.execute_script(js)
        def SetTextBox(self,text,by,value):
            '''
            :param text:     设置文本框的值
            :param by:       查找元素的方式
            :param value:    文本值
            :return:
            '''
            element=self.getElement(by,value)
            self.driver.execute_script("arguments[0].innerHTML = "" + text + """,element)
    
        def getTextBox(self,by,value):
            '''
            :param by:       查找元素的方式
            :param value:    文本值
            :return:         返回富文本框的值
            '''
            elment=self.getElement(by,value)
            return self.driver.execute_script("arguments[0].innerHTML()",elment)
    
        def InputByJs(self,by,value):
            '''
            :param by:     查找元素的方式
            :param value:  文本值
            :return:
            '''
            element=self.getElement(by,value)
            self.driver.execute_script("arguments[0].value=""+value+""",element)
    
        def scrollToElement(self,by,value):
            '''
            :param by:     查找元素的方式
            :param value:  文本值
            :return:
            '''
            elment=self.getElement(by,value)
            self.driver.execute_script("arguments[0].scrollIntoViewIfNeeded(true);",elment)
    
        def SwitchWindow_Two(self):
            '''
            适用于两个窗口的切换
            :return:
            '''
            CurrentHandle=self.driver.current_window_handle
            handles=self.driver.window_handles
            for handle in  handles:
                if handle==CurrentHandle:
                    continue
                else:
                    self.driver._switch_to.window(handle)
    
        def SwitchWindow_By_Tltle(self,Title):
            '''
            :param Title: 浏览器窗口标题
            :return:
            '''
            flag=False
            CurrentHandle=self.driver.current_window_handle
            handles=self.driver.window_handles
            for handle in  handles:
                if handle==CurrentHandle:
                    continue
                else:
                    self.driver.switch_to_window(handle)
                    if Title in self.driver.title:
                        flag=True
                        return flag
            return flag
    
    
        def SwitchWindow_By_Url(self,url):
            '''
            :param url:   需要切换窗口的url
            :return:
            '''
            flag=False
            CurrentHandle=self.driver.current_window_handle
            handles=self.driver.window_handles
            for handle in  handles:
                self.driver.switch_to_window(handle)
                if url in self.driver.current_url:
                    flag=True
                    return  flag
            return  flag
    
    
        def max_window(self):
            '''
            :return: 最大化窗口
            '''
            self.driver.maximize_window()
    
    
        def getUrl(self,url):
            '''
            :param url: 转向地址
            :return:
            '''
            self.driver.get(url)
    
        def wait(self,seconds):
            '''
            :param seconds:    等待时间
            :return:
            '''
            self.driver.implicitly_wait(seconds)
    
        def Close(self):
            '''
            :return:  关闭窗口
            '''
            self.driver.close()
    
        def Quit(self):
            '''
            :return:  退出浏览器
            '''
            self.driver.quit()
    
        def find_element(self,element):
            """
            Judge element positioning way, and returns the element.
    
            Usage:
            driver.find_element  此为元组(id,kw),此方法为PageObject模式准备方法
            """
            by = element[0]
            value = element[1]
    
            if by == "id":
                return self.driver.find_element_by_id(value)
            elif by == "name":
                return self.driver.find_element_by_name(value)
            elif by == "class":
                return self.driver.find_element_by_class_name(value)
            elif by == "text":
                return self.driver.find_element_by_link_text(value)
            elif by == "text_part":
                return self.driver.find_element_by_partial_link_text(value)
            elif by == "xpath":
                return self.driver.find_element_by_xpath(value)
            elif by == "css":
                return self.driver.find_element_by_css_selector(value)
            else:
                raise NameError("Please enter the correct targeting elements,'id','name','class','text','xpath','css'.")
    
    
        def wait_element(self, element, seconds=5):
            """
            等待元素在指定的时间类出现
            :param element:      元素的定位表达式
            :param seconds:      等待的时间
            :return:
            """
            by = element[0]
            value = element[1]
    
            if by == "id":
                WebDriverWait(self.driver,seconds,1).until(EC.presence_of_element_located((By.ID, value)))
            elif by == "name":
                WebDriverWait(self.driver,seconds,1).until(EC.presence_of_element_located((By.NAME, value)))
            elif by == "class":
                WebDriverWait(self.driver,seconds,1).until(EC.presence_of_element_located((By.CLASS_NAME, value)))
            elif by == "text":
                WebDriverWait(self.driver,seconds,1).until(EC.presence_of_element_located((By.LINK_TEXT, value)))
            elif by == "xpath":
                WebDriverWait(self.driver,seconds,1).until(EC.presence_of_element_located((By.XPATH, value)))
            elif by == "css":
                WebDriverWait(self.driver,seconds,1).until(EC.presence_of_element_located((By.CSS_SELECTOR, value)))
            else:
                raise NameError("Please enter the correct targeting elements,'id','name','class','text','xpaht','css'.")
    
        def Send_Keys(self,element,value):
            '''
            :param element:     元素的定位表达式
            :param value:       输入值
            :return:
            '''
            self.wait_element(element)
            self.find_element(element).clear()
            self.find_element(element).send_keys(value)
    
        def Click(self,element):
            '''
            功能:点击
            :param element: 元素的定位表达式
            :return:
            '''
            self.wait_element(element)
            self.find_element(element).click()
    
        def Right_Click(self,element):
            '''
            功能:右击
            :param element: 元素的定位表达式
            :return:
            '''
            self.wait_element()
            ActionChains.context_click(self.find_element(element)).perform()
    
        def MoveToElement(self,element):
            '''
            功能:移动到元素
            :param element: 元素的定位表达式
            :return:
            '''
            self.wait_element(element)
            ActionChains.move_to_element(self.find_element(element)).perform()
    
        def double_click(self,element):
            '''
            功能:双击元素
            :param element: 元素的定位表达式
            :return:
            '''
            self.wait_element(element)
            ActionChains.double_click(self.find_element(element)).perform()
    
        def  drag_and_drop(self,element):
            '''
            功能:拖拽元素
            :param element: 元素的表达式
            :return:
            '''
            self.wait_element(element)
            ActionChains.drag_and_drop(self.find_element(element)).perform()
    
        def back(self):
            '''
            功能:返回
            :return:
            '''
            self.driver.back()
    
        def forward(self,element):
            '''
    
            :param element:  元素的表达式
            :return:
            '''
    
            self.driver.forward()
    
    
        def get_attribute(self, element, attribute):
            """
            功能:得到元素的属性值
            :param element:    元素表达式
            :param attribute:  属性名称
            :return:
            """
            self.wait_element(element)
            return self.find_element(element).get_attribute(attribute)
    
        def get_text(self, element):
            """
    
            :param element:  元素表达式
            :return:         返回的是元素的文本值
            """
    
            self.wait_element(element)
            return self.find_element(element).text
    
        def get_display(self, element):
            """
            功能:判断元素是否显示
            :param element: 元素表达式
            :return:
            """
    
            self.wait_element(element)
            return self.find_element(element).is_displayed()
    
        def get_title(self):
            """
            功能:得到浏览器的标题
            :return:
            """
            return self.driver.title
    
        def get_url(self):
            """
            功能:得到浏览器的url
            :return:
            """
            return self.driver.current_url
    
        def get_screenshot(self, file_path):
            """
            功能:截图并保存
            :param file_path:  文件路径
            :return:
            """
            self.driver.get_screenshot_as_file(file_path)
    
        def submit(self, element):
            """
            功能:提交特定的表单
            :param element:   元素表达式
            :return:
            """
            self.wait_element(element)
            self.find_element(element).submit()
    
        def switch_to_frame(self, element):
            """
            功能:切换到特定的frame
            :param element: 元素的表达式
            :return:
            """
            self.wait_element(element)
            self.driver._switch_to_frame(self.find_element(element))
    
        def switch_to_frame_out(self):
            """
            功能:切换到默认的上下文
            :return:
            """
            self.driver.switch_to.default_content()
    
        def F5(self):
            '''
            功能:刷新页面
            :return:
            '''
            self.driver.refresh()
    
        def accept_alert(self):
            """
            功能:确认按钮
            :return:
            """
            self.driver.switch_to.alert.accept()
    
        def dismiss_alert(self):
            """
            功能:对话框取消
            :return:
            """
            self.driver.switch_to.alert.dismiss()
    

      

  • 相关阅读:
    iOS 开发小记 (五)
    ReentrantLock API
    多线程之生产者消费者
    maven私服的项目使用配置
    maven仓库nexus安装配置
    thymeleaf自定义标签方言处理
    关于svn更新失败,clearup异常解决
    shiro+spring
    日常遇到的小问题
    springmvc控制器controller单例问题
  • 原文地址:https://www.cnblogs.com/mlmy/p/6295174.html
Copyright © 2011-2022 走看看