python自动化封装

  1 # -*- coding:utf-8 -*-
  2 from selenium import webdriver
  3 import time
  4 
  5 OVER_TIME = 5
  6 BASE_URL = "https://passport.cnblogs.com/user/signin?ReturnUrl=https%3A%2F%2Fwww.cnblogs.com%2F"
  7 
  8 
  9 class Driver(object):
 10 
 11     def __new__(cls, *args, **kw):
 12         """
 13         使用单例模式将类设置为运行时只有一个实例,在其他Python类中使用基类时,
 14         可以创建多个对象,保证所有的对象都是基于一个浏览器
 15         """
 16         if not hasattr(cls, '_instance'):
 17             orig = super(Driver, cls)
 18             cls._instance = orig.__new__(cls, *args, **kw)
 19         return cls._instance
 20 
 21     def start(self, url=BASE_URL, driver_name="Firefox"):
 22         """
 23         启动浏览器
 24         :param url: 测试地址
 25         :param driver_name: 在启动时设置浏览器的类型
 26         :return:
 27         """
 28         if driver_name == "Firefox":
 29             self.driver = webdriver.Firefox()
 30         elif driver_name == "Ie":
 31             self.driver = webdriver.Ie()
 32         else:
 33             self.driver = webdriver.Chrome()
 34         self.driver.implicitly_wait(OVER_TIME)
 35         self.driver.get(url)
 36         self.driver.maximize_window()
 37 
 38     def get_url(self):
 39         """返回浏览器的地址"""
 40         return BASE_URL
 41 
 42     def find_element(self, by, value):
 43         """
 44         这里添加了一个OVER_TIME作为查找元素的超时次数,根据系统的实际情况设置OVER_TIME的大小
 45         """
 46         for i in range(OVER_TIME):
 47             try:
 48                 return self.driver.find_element(by=by, value=value)
 49             except Exception as e:
 50                 print(e)
 51 
 52     def find_elements(self, by, value):
 53         """与find_element一致"""
 54         for i in range(OVER_TIME):
 55             try:
 56                 return self.driver.find_elements(by=by, value=value)
 57             except Exception as e:
 58                 print(e)
 59 
 60     def find_display_elements(self, by, value):
 61         """
 62         查找状态为displayed的元素集合,当查找一类元素时,
 63         经常出现有些元素是不可见的情况,此函数屏蔽那些不可见的元素
 64         """
 65         for i in range(OVER_TIME):
 66             try:
 67                 elements = self.driver.find_elements(by=by, value=value)
 68                 num = elements.__len__()
 69             except Exception as e:
 70                 print(e)
 71                 time.sleep(1)
 72             if num >= 1:
 73                 break
 74         display_element = []
 75         # 将可见的元素放到列表中, 并返回
 76         for j in range(num):
 77             element = elements.__getitem__(j)
 78             if element.is_displayed():
 79                 display_element.append(element)
 80         return display_element
 81 
 82     def is_element_present(self, By, Value):
 83         """判断元素是否存在"""
 84         try:
 85             self.driver.find_element(by=By, value=Value)
 86             return True
 87         except Exception as e:
 88             print(e)
 89             return False
 90 
 91     def close(self):
 92         self.driver.close()
 93 
 94     def quit(self):
 95         u"""退出浏览器"""
 96         self.driver.quit()
 97 
 98 if __name__ == "__main__":
 99     page = Driver()
100     page.start()

猜你喜欢

转载自www.cnblogs.com/testlove/p/10061406.html