zoukankan      html  css  js  c++  java
  • Selenium封装

    import os
    from  selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.common.exceptions import NoSuchElementException
    from selenium.common.exceptions import TimeoutException
    
    
    class Driver(object):
        @staticmethod
        def getDriver(option):
    
            if option == "gc":
                driver = webdriver.Chrome()
            elif option == "ff":
                driver = webdriver.Firefox()
            elif option == "ie":
                driver = webdriver.Ie()
            else:
                raise NameError("目前暂时只支持三剑客浏览器,option desc ==> gc:Chrome,ff:Firefox,ie:IE")
            driver.implicitly_wait(time_to_wait=20)
            driver.maximize_window()
            return driver
    
    
    class EleUtil(Driver):
        driver = Driver.getDriver("gc")
    
        @staticmethod
        def find_element(*loc):
            return EleUtil.driver.find_element(*loc)
    
        @staticmethod
        def find_elements(*loc):
            return EleUtil.driver.find_element(*loc)
    
    
    class Base(EleUtil):
        @staticmethod
        def openPage(url):
            return EleUtil.driver.get(url)
    
        @staticmethod
        def getTitle():
            return EleUtil.driver.current_url
    
        def wait_located_element(self, timeout, *loc_tuple):
            # 判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement
            try:
                ele = WebDriverWait(EleUtil.driver, timeout).until(EC.presence_of_element_located(*loc_tuple))
                if ele:
                    return ele
    
            except TimeoutException:
    
                raise NoSuchElementException("No such element")
    
        def wait_visibility_element(self, timeout, *loc_tuple):
            try:
    
                ele = WebDriverWait(EleUtil.driver, timeout).until(EC.visibility_of_element_located(*loc_tuple))
                if ele:
                    return ele
            except TimeoutException:
                raise NoSuchElementException("No such element")
    
        def waitUtilVisibilityEle(self, timeout, ele):
            try:
                element = WebDriverWait(EleUtil.driver, timeout).until(EC.visibility_of(ele))
                if element:
                    return element
            except Exception:
                raise NoSuchElementException("no such element.....")
    
        def waitUtilVisibility_Elements(self, timeout, *loc):
    
            elements = WebDriverWait(EleUtil.driver, timeout).until(EC.presence_of_all_elements_located(*loc))
            return elements
    
        def move_to(self, ele):
            ActionChains(EleUtil.driver).move_to_element(to_element=ele).perform()
    
        def refresh(self):
            EleUtil.driver.refresh()
    
        def screen(self, img_path):
            EleUtil.driver.get_screenshot_as_file(img_path)
    
        def selectNewWindow(self):
            cur_handle = EleUtil.driver.current_window_handle
            for handle in EleUtil.driver.window_handles:
                if handle != cur_handle:
                    EleUtil.driver.switch_to.window(handle)
    

     

    2.框架引用uittest

    import unittest
    from lib.selenium_utils import *
    from selenium import webdriver
    import time
    from time import sleep
    
    
    class Test(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            print("打开浏览器")
            cls.a = time.clock()
            Base.openPage("http://www.baidu.com")
    
        @classmethod
        def tearDownClass(cls):
            Base.driver.quit()
            b = time.clock() - cls.a
            print("关闭浏览器", b)
    
        def test_method1(self):
            Base.find_element(By.ID, "kw").send_keys("selenium2 python")
            Base.find_element(By.ID, "su").click()
            print(Base.getTitle())
    
        def test_method2(self):
            Base.openPage("https://www.cnblogs.com/Rita-LJ/p/8079094.html")
            print(Base().getTitle())
    
    
    if __name__ == "__main__":
        unittest.main()  # 程序入口





      

    封装模式二:

    class Base(object):
        def __init__(self,driver):
    
             self.driver=driver
    
        def find_element(self,*loc):
            return self.driver.find_element(*loc)
    
    
        def find_elements(self,*loc):
            return self.driver.find_elements(*loc)
    
        def openPage(self,url):
            self.driver.get(url)
    
        def getTitle(self):
            return  self.driver.current_url

    框架引用

    from selenium import webdriver
    from lib.tett import Base
    import time
    from selenium.webdriver.common.by import By
    import unittest
    
    class Test(unittest.TestCase):
    
        def setUp(self):
            print("打开浏览器")
            self.a=time.clock()
            self.driver=webdriver.Chrome()
            self.driver.maximize_window()
            Base(self.driver).openPage("http://www.baidu.com")
            print(Base(self.driver).getTitle())
        def tearDown(self):
            self.driver.close()
            b=time.clock()-self.a
            print("close浏览器",b)
        def test_1(self):
            Base(self.driver).openPage("http://www.vip.com")
            print(Base(self.driver).getTitle())
        def test_2(self):
            Base(self.driver).find_element(By.ID,"kw").send_keys("selenium2 python")
            Base(self.driver).find_element(By.ID,"su").click()
            print(Base(self.driver).getTitle())
    if __name__ == "__main__":
        unittest.main()
    

      

  • 相关阅读:
    三元表达式 列表和字典推导式 函数对象 名称空间 作用域 global和nonlocal 函数装饰器 枚举对象
    函数参数 打散机制 字符串比较 返回值
    函数简介
    三种字符串的介绍 文件的读写
    字符编码
    数据类型及其常用方法 数据类型转换 可变与不可变 值拷贝与深浅拷贝
    流程控制 while和for循环
    变量命名规范 常量 输入和输出 注释 数据类型 运算符 逻辑运算符
    语言分类 编译型和解释型语言分析 环境变量 代码执行的方式 pip介绍 变量
    Python django tests
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/10585917.html
Copyright © 2011-2022 走看看