python中ui自動化selenium方法封裝分享


# -*- coding: utf-8 -*-
# @Time : 2021年02月07日 13時58分
# @Email : Gamest@foxmail.com
# @Author : BeiLe
# @File : base_class.py
# @notice :


from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
from Common.path_os import record_dir
from Common.log import Log
import time
import win32gui
import win32con

log = Log()


class Base:

    # 引入驅動
    def __init__(self, drivers):
        self.driver = drivers

    # 截圖
    def record(self, model_name="error"):
        RecordPath = record_dir + "/{}_{}.png".format(model_name,
                                                      time.strftime("%Y-%m-%d-""%H-%M-%S", time.localtime()))
        try:
            self.driver.get_screenshot_as_file(RecordPath)
        except Exception as e:
            log.error("截圖失敗:{}".format(e))

    # 等待元素 - 默認等待30秒,每0.5秒找一次
    def wait_elevisible(self, locator, timeout=30, poll_frequency=0.5, model_name="model"):
        try:
            WebDriverWait(self.driver, timeout, poll_frequency).until(
                expected_conditions.visibility_of_element_located(locator))
        except Exception as e:
            self.record(model_name)
            log.error("等待超時,未找到元素:{}".format(e))

    # 查找元素
    def get_element(self, locator, model_name="model"):
        try:
            return self.driver.find_element(*locator)
        except Exception as e:
            self.record(model_name)
            log.error("未找到元素:{}".format(e))

    # 點擊元素
    def click_elemet(self, locator, model_name="model"):
        ele = self.get_element(locator, model_name)
        try:
            ele.click()
        except Exception as e:
            self.record(model_name)
            log.error("點擊元素失敗:{}".format(e))

    # 輸入框 - 輸入內容
    def input_text(self, locator, value, model_name="model"):
        ele = self.get_element(locator, model_name)
        try:
            ele.send_keys(value)
        except Exception as e:
            self.record(model_name)
            log.error("輸入內容失敗:{}".format(e))

    # 輸入框 - 清空內容
    def clear_text(self, locator, model_name="model"):
        ele = self.get_element(locator, model_name)
        try:
            ele.clear()
        except Exception as e:
            self.record(model_name)
            log.error("清空輸入框內容失敗:{}".format(e))

    # 獲取元素的文本內容
    def get_text(self, locator, model_name="model"):
        ele = self.get_element(locator, model_name)
        try:
            return ele.text
        except Exception as e:
            self.record(model_name)
            log.error("獲取元素文本內容失敗:{}".format(e))

    # 獲取元素屬性
    def get_ele_attribute(self, locator, attribute, model_name="model"):
        ele = self.get_element(locator, model_name)
        try:
            return ele.get_attribute(attribute)
        except Exception as e:
            self.record(model_name)
            log.error("獲取元素屬性失敗:{}".format(e))

    # 元素存在則為True,否則為False
    def is_eleExist(self, locator, model_name="model"):
        try:
            self.wait_elevisible(locator, model_name=model_name)
            return True
        except Exception as e:
            self.record(model_name)
            log.error("元素不存在:{}".format(e))
            return False

    # 切換alert彈框
    def switch_to_alert(self, action="accept", content="請輸入內容", model_name="model"):
        try:
            WebDriverWait(self.driver, timeout=30, poll_frequency=0.5).until(expected_conditions.alert_is_present())
            # 切換到alert
            alert = self.driver.switch_to.alert
            # 確定按鈕
            if action == "accept":
                alert.accept()
            # 輸入框
            elif action == "value":
                alert.send_keys(content)
            # 取消按鈕
            else:
                alert.dismiss()
        except Exception as e:
            self.record(model_name)
            log.error("alert操作失敗:{}".format(e))

    # windows窗口切換
    def switch_window(self, str_wd="", index=None, model_name="mode1"):
        try:
            time.sleep(2)
            # 獲取所有窗口
            windows = self.driver.window_handles
            if str_wd == "new":
                self.driver.switch_to.window(windows[-1])
            else:
                if index is not None and 0 <= int(index) < len(windows):
                    self.driver.switch_to.window(windows[int(index)])
        except Exception as e:
            self.record(model_name)
            log.error("切換瀏覽器窗口失敗:{}".format(e))

    # iframe切換
    def switch_to_iframe(self, locator, model_name="mode1"):
        try:
            # 切過去
            ele = self.get_element(locator)
            WebDriverWait(self.driver, timeout=30, poll_frequency=0.5).until(
                expected_conditions.frame_to_be_available_and_switch_to_it(ele))
            # 執行命令后切回來
            self.driver.switch_to.default_content()
        except Exception as e:
            self.record(model_name)
            log.error("切換iframe失敗:{}".format(e))

    # 上傳文件  每個系統不一樣,一般是這種
    def upload(self, file, browser_type="chrome", model_name="mode1"):
        try:
            if browser_type == "chrome":
                title = "打開"
            else:
                title = ""
            # 一級窗口
            dialog = win32gui.FindWindow("#32770", title)
            # 二級窗口
            ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None)
            comboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, "ComboBox", None)
            # 三級窗口 - 輸入框
            edit = win32gui.FindWindowEx(comboBox, 0, 'Edit', None)
            # 四級窗口 - 打開按鈕
            open_button = win32gui.FindWindowEx(dialog, 0, 'Button', "打開(&O)")
            # 輸入文件路徑
            win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, file)
            # 上傳
            win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, open_button)
        except Exception as e:
            self.record(model_name)
            log.error("上傳文件失敗:{}".format(e))

    # 滾動條操作
    def move_to_see(self, locator, type_ele="will", model_name="mode1"):
        try:
            if type_ele == "will":
                self.driver.execute_script("arguments[0].scrollIntoView();", locator)
                time.sleep(2)
            elif type_ele == "top":
                self.driver.execute_script("window.scrollTo(0,0)")
                time.sleep(2)
            else:
                self.driver.execute_script("var q=document.documentElement.scrollTop=10000")
                time.sleep(2)
        except Exception as e:
            self.record(model_name)
            log.error("滾動條操作失敗:{}".format(e))

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM