selenium-項目實戰-1

1:先看看整個項目結構web

 

 2:commom(公共類封裝)api

      2.1  路徑處理封裝dom

        

import os
base_path=os.path.dirname(os.path.dirname(__file__))
#日誌路徑
logger_path=os.path.join(base_path,"out_put_log","System_of_Docter.log")
#測試域名選擇路徑
switch_path=os.path.join(base_path,"config","url_config","switch.cfg")
#線上域名路徑
online_path=os.path.join(base_path,"config","url_config","online.cfg")
#測試域名路徑
test_path=os.path.join(base_path,"config","url_config","test.cfg")

    2.2  配置文件讀取封裝測試

    

from configparser import ConfigParser
from common.all_of_path import  switch_path
class Config:
    def __init__(self,file_path):
        self.conf=ConfigParser()
        self.conf.read(filenames=file_path,encoding="utf-8")
    def get_boolen_value(self,section,option):
         return self.conf.getboolean(section,option)
    def get_string_value(self,section,option):
         return self.conf.get(section,option)
if __name__ == '__main__':
    c=Config(switch_path)
    print(c.get_boolen_value("switch","switch"))

   2.3 日誌處理封裝url

   

import logging
from common.all_of_path import logger_path
class Logger:
    def __init__(self,name="System_of_Docter"):
        self.logger = logging.getLogger(name)
        self.logger.setLevel(logging.DEBUG)
        #添加文件日誌和控制檯日誌
        self.filehandler=logging.FileHandler(filename=logger_path,mode="w+",encoding="utf-8")
        self.consolehandler=logging.StreamHandler()
        #爲文件日誌和控制檯日誌添加日誌級別
        self.filehandler.setLevel("INFO")
        self.consolehandler.setLevel("DEBUG")
        #文件日誌處理器和控制檯日誌處理器添加日誌輸出格式
        formatt = logging.Formatter("%(asctime)s____%(name)s___%(levelname)s___%(message)s")#___[%(filename)s:%(lineno)d]
        self.filehandler.setFormatter(formatt)
        self.consolehandler.setFormatter(formatt)
        self.logger.addHandler(self.filehandler)
        self.logger.addHandler(self.consolehandler)
        self.filehandler.close()
        self.consolehandler.close()
    def get_logger(self):
        return self.logger
    def remove_handle(self):
        self.logger.removeHandler(self.consolehandler)
        self.logger.removeHandler(self.filehandler)
if __name__ == '__main__':
   l=Logger()
   t=l.get_logger()
   t.info("我是info1信息")
   t.info("我是info2信息")
   # t.exception("超時異常")
   # l.remove_handle()

  2.4  basepage(重用元素操做封裝)spa

    

from selenium.webdriver.support.wait import  WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from common.logger import Logger
from selenium.webdriver.support.select import Select
import win32clipboard as w
import win32con
import win32api
import time
import os
from PIL import Image
import math
import operator
from functools import reduce
from test_data.add_new_patient_data.clinical_setings_photo.get_screenshot_path import ele_screenshot_path
logger=Logger().get_logger()
class BasePage:
    def __init__(self,driver):
        self.driver=driver
    def wait_presence_element(self,loc,timeout=30,frequency=1):
        """等待元素被加載到dom樹並不必定可見"""
        logger.info("正在準備等待元素{}被加載到dom樹中".format(loc))
        try:
            WebDriverWait(self.driver,timeout,frequency).until(EC.presence_of_element_located(loc))
            logger.info("{}元素被成功加載到dom樹".format(loc))
        except:
            logger.exception("{}元素不存在dom樹中")
    def wait_element_visible(self,loc,timeout=30,frequency=1):
        """等待元素可見"""
        logger.info("正在準備等待{}元素可見".format(loc))
        try:
             WebDriverWait(self.driver,timeout,frequency).until(EC.visibility_of_element_located(loc))
             logger.info("{}元素可見成功".format(loc))
        except:
             logger.exception("等待{}元素可見失敗".format(loc))
    def find_element(self,loc):
        logger.info("正在準備查找{}元素".format(loc))
        try:
            web_object=self.driver.find_element(*loc)
            logger.info("{}元素查找成功".format(loc))
            return web_object
        except:
            logger.exception("{}元素查找失敗")
    def find_elements_back_length(self,loc):
        logger.info("正在準備查找一些{}元素".format(loc))
        try:
            ele_list=self.driver.find_elements(*loc)
            logger.info("一些{}元素查找成功".format(loc))
            return len(ele_list)
        except:
            logger.exception("一些{}元素查找失敗".format())
    def find_elements(self,loc,index):
        logger.info("正在準備查找一些{}元素".format(loc))
        try:
            web_eles=self.driver.find_elements(*loc)
            logger.info("一些{}元素查找成功".format(loc))
            return web_eles[index]
        except:
            logger.exception("一些{}元素查找失敗".format(loc))
    def find_elements_back_all(self,loc):
        logger.info("正在準備查找一些{}元素".format(loc))
        try:
            web_eles=self.driver.find_elements(*loc)
            logger.info("一些{}元素查找成功".format(loc))
            return web_eles
        except:
            logger.exception("一些{}元素查找失敗".format(loc))
    def clear_text(self,loc):
        logger.info("正在準備清除{}元素輸入框內容".format(loc))
        try:
              self.find_element(loc).clear()
              logger.info("{}元素輸入框內容清除成功".format(loc))
        except:
              logger.exception("{}元素輸入框內容清除失敗".format(loc))
    def send_value(self,loc,value):
        logger.info("正在準備在{}元素輸入框輸入內容".format(loc,value))
        try:
            self.find_element(loc).send_keys(value)
            logger.info("{}元素輸入框輸入{}內容成功".format(loc,value))
        except:
            logger.exception("{}元素輸入框輸入{}內容失敗".format(loc,value))
    def click_element(self,loc):
        logger.info("正在準備點擊{}元素".format(loc))
        try:
            self.find_element(loc).click()
            logger.info("{}元素點擊成功".format(loc))
        except:
            logger.exception("{}元素點擊失敗".format(loc))

    def click_element_by_ele(self, ele):
        logger.info("正在準備點擊{}對象".format(ele))
        try:
            ele.click()
            logger.info("{}對象點擊成功".format(ele))
        except:
            logger.exception("{}對象點擊失敗".format(ele))
    def click_elements(self,loc,index):
        logger.info("正在準備點擊{}元素下標爲{}的元素".format(loc,index))
        try:
            self.find_elements(loc,index).click()
            logger.info("{}元素下標爲{}的元素點擊成功".format(loc,index))
        except:
            logger.exception("{}元素下標爲{}元素點擊失敗".format(loc,index))
    def get_element_text(self,loc):
        logger.info("正在準備獲取{}元素的文本值".format(loc))
        try:
            text_value=self.find_element(loc).text
            logger.info("獲取{}元素文本值成功".format(loc))
            return text_value
        except:
            logger.exception("獲取{}元素文本值失敗".format(loc))
    def is_selected(self,loc):
        logger.info("正在準備判斷{}元素是否可被選中".format(loc))
        try:
            is_selected_value=self.find_element(loc).is_selected()
            if is_selected_value:
                logger.info("{}元素已經被選中".format(loc))
                return is_selected_value
            else:
                logger.info("{}元素沒有被選中".format(loc))
                return  is_selected_value
        except:
            logger.exception("判斷{}元素是否被選中失敗".format(loc))
    def is_selected_by_ele(self, ele):
        logger.info("正在準備判斷{}對象是否可被選中".format(ele))
        try:
            is_selected_value = ele.is_selected()
            if is_selected_value:
                logger.info("{}對象已經被選中".format(ele))
                return is_selected_value
            else:
                logger.info("{}對象沒有被選中".format(ele))
                return is_selected_value
        except:
            logger.exception("判斷{}對象是否被選中失敗".format(ele))
    def scroll_mouse(self,loc):
        logger.info("正在準備滾動屏幕到目標元素{}".format(loc))
        try:
            self.driver.execute_script("arguments[0].scrollIntoView();",self.find_element(loc))
            logger.info("滾動到目標元素{}成功".format(loc))
        except:
            logger.exception("滾動到目標元素{}失敗".format(loc))
    def select_down_element(self,loc,select_value):
        logger.info("正在準備選中下拉列表的value值爲{}的元素".format(select_value))
        try:
            select=Select(self.find_element(loc))
            select.select_by_value(select_value)
            logger.info("下拉列表value值爲{}的元素被選中".format(select_value))
            return  select.first_selected_option.text
        except:
            logger.exception("下拉列表value值爲{}的元素選中失敗".format())
            return select.first_selected_option.text
    def cutting(self,file_path):
        logger.info("正在準備剪切本地路徑爲:{}的圖片".format(file_path))
        try:
            w.OpenClipboard()
            w.EmptyClipboard()
            w.SetClipboardData(win32con.CF_UNICODETEXT,file_path)
            w.CloseClipboard()
            time.sleep(2)
            logger.info("剪切本地路徑{}圖片成功".format(file_path))
        except:
            logger.exception("本地路徑爲:{}的圖片上傳失敗".format(file_path))
    def upload_image(self):
        logger.info("正在準備打開圖片")
        try:
            VK_CODE = {
               "ctrl": 0x11,
               "v": 0x56,
               "enter": 0x0D,
             }
            win32api.keybd_event(VK_CODE["ctrl"],0,0,0)
            win32api.keybd_event(VK_CODE["v"], 0, 0, 0)
            win32api.keybd_event(VK_CODE["ctrl"], 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(VK_CODE["v"], 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(VK_CODE["enter"], 0, 0, 0)
            win32api.keybd_event(VK_CODE["enter"], 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(2)
            logger.info("圖片打開成功")
        except:
            logger.exception("圖片打開失敗")
    def alter_is_present(self,timeout=30,frequency=1):
        logger.info("正在準備判斷alter是否出現")
        try:
            WebDriverWait(self.driver,timeout,frequency).until(EC.alert_is_present())
            logger.info("alter 彈框已經出現")
        except:
            logger.exception("alter 彈框沒有出現")

    def deal_alter(self,value="1"):#driver.switch_to.alert.accept()
        logger.info("正在準備處理alter彈框")
        try:
            if value=="1":
                text=self.driver.switch_to.alert.text
                self.driver.switch_to.alert.accept()
                logger.info("alter接受成功")
                return text
            else:
                self.driver.switch_to.alert.dismiss()
                logger.info("alter 取消接收")
        except:
            logger.exception("alter彈框處理失敗")
    def refresh(self):
        logger.info("正在準備刷新頁面")
        try:
            self.driver.refresh()
            logger.info("頁面刷新成功")
        except:
            logger.exception("頁面刷新失敗")

    def get_ele_sreenshot(self,loc,file_path,filename):
        logger.info("正在準備對{}元素對象進行截屏操做")
        try:
            self.find_element(loc).screenshot(os.path.join(file_path,filename))
            logger.info("{}元素對象截屏成功,並命名爲{}".format(loc,filename))
        except:
            logger.exception("{}元素對象截屏失敗".format(loc))
    def get_ele_sreenshot_by_ele(self,ele,file_path,filename):
        logger.info("正在準備對{}元素對象進行截屏操做")
        try:
            ele.screenshot(os.path.join(file_path,filename))
            logger.info("{}元素對象截屏成功,並命名爲{}".format(ele,filename))
        except:
            logger.exception("{}元素對象截屏失敗".format(ele))
    def query_photo(self,filename_one,filename_other):
        logger.info("正在準備判斷這張圖片{}和這張圖片{}是否同樣".format(filename_one,filename_other))
        try:
            image1=Image.open(os.path.join(ele_screenshot_path,filename_one))
            image2=Image.open(os.path.join(ele_screenshot_path,filename_other))
            histogram1=image1.histogram()
            histogram2=image2.histogram()
            result= math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2,histogram1, histogram2)))/len(histogram1))
            if result ==0.0:
                logger.info("兩張圖片同樣")
                return  True
            else:
                logger.info("兩張圖片不同")
                return False
        except:
            logger.exception("判斷兩張圖片是否同樣失敗")
相關文章
相關標籤/搜索