1. 程式人生 > 其它 >【Python自動化】之特殊的自動化操作

【Python自動化】之特殊的自動化操作

今天有時間了,想好好的把之前遇到過的自動化問題總結一下,以後有新的總結再更新

目錄:

一、上傳檔案(4.11)

二、下拉框選擇(4.11)

附錄:

 

一、上傳檔案

利用滑鼠pymouse、鍵盤pykeyboard操作

import pyperclip
from pykeyboard import PyKeyboard
from pymouse import PyMouse


    def upload_file(self, fileName):
        """PyUserInput方法:上傳檔案"""

        #
建立滑鼠物件 k = PyKeyboard() # 建立鍵盤物件 m = PyMouse() # 模擬快捷鍵Command+Shift+G k.press_keys(["Command", "Shift", "G"]) # 輸入檔案路徑 x_dim, y_dim = m.screen_size() # //點選螢幕中間,除法取整數 m.click(x_dim // 2, y_dim // 2, 1) # 點選,想x,y座標,button:-1表示左鍵,-2表示右鍵,n:預設1次,2雙擊
# 複製檔案檔案全路徑 pyperclip.copy(fileName) # 貼上路徑,模擬快捷鍵Command+V k.press_keys(["Command", "V"]) k.tap_key("Shift") # 加上這個之後才能點選回車(未知情況) for i in range(2): k.press_key("return") time.sleep(2) # 呼叫上傳檔案方法 def uploadImg(self, imgLoc, imgName):
"""上傳圖片檔案""" self.el_click(imgLoc) Fun().upload_file(loc.filePathData + imgName) sleep(2)

二、下拉框選擇  返回目錄

1、Select下拉框

   # ①在basePage定義Select下拉選擇方法
   def webDriverWait(self, loc):
        """顯式等待,查詢單元素"""
        WebDriverWait(self.driver, 10).until(EC.visibility_of_element_located(loc))
        return self.find_element(loc)

   def el_select(self, loc, text):
        """下拉框選擇元素"""
        Select(self.webDriverWait(loc)).select_by_visible_text(text)
   
   # ②定位Select元素
   province_loc = (By.CSS_SELECTOR, "form>div:nth-child(4)>div>div>label:nth-child(1)>select")
   # ③呼叫Select方法
   self.el_select(loc.province_loc, loc.province)

2、非Select下拉框

1)方法一:

優:定位元素寫法簡潔,定位速度較快

缺:不利於維護,定位不明確

    def els_click_index(self, loc, index):
        """點選多元素事件:座標"""
        self.webDriverWaits(loc)[index-1].click()

    # 定位多元素
    regionName1_loc = (By.CSS_SELECTOR, "ul>li>span")
  
    # 定位多元素,並根據元素的座標位置,進行選擇
    self.els_click_index(loc.regionName1_loc, 2)   # 座標點:選擇第二個下拉框,執行22s283ms

2)方法二:

優:定位元素寫法簡潔,定位元素明確利於維護

缺:定位速度最慢

    def els_click(self, loc, name):
        """點選多元素事件:元素"""
        list = self.webDriverWaits(loc)
        for i in list:
            if name == i.text:
                i.click()
        time.sleep(2)
    
    # 定位元素
   regionName2 = "新建區域2"
    regionName2_loc = (By.XPATH, "//ul/li/span")

    # 定位多元素,並且呼叫方法點選指定名元素
    self.els_click(loc.regionName2_loc, loc.regionName2)   # 多元素方法:選擇第二個下拉框,執行25s624ms

3)方法三:(推薦)

 

優:定位元素明確利於維護,定位速度最快

 

缺:定位元素寫法較長

 

    def el_click(self, loc):
        """點選單元素事件"""
        self.webDriverWait(loc).click()

    # 定位多元素,並模糊查詢元素
    regionName2 = "新建區域2"
    regionName3_loc = (By.XPATH, f"//ul/li/span[contains(text(),'{regionName2}')]")

    # 定位多元素,並且點選指定名元素
    self.el_click(loc.regionName3_loc)   # 多元素簡寫:選擇第二個下拉框,執行20s246ms

綜合以上三種方法,方法三效果更好,選擇元素目的明確,程式碼執行時間更少,程式碼更簡潔。

 

附錄:  返回目錄

參考文章

selenium 定位下拉選擇框元素

selenium Xpath應用疑難一:contains的用法

selenium~進階操作定位一組元素、定位多層框架/視窗、下拉框處理、提示框處理、上傳檔案操作