mac下python自動化測試中上傳文件的解決方案。

mac+python3+selenium 通過控制系統輔助功能上傳文件

問題描述

selenium提供的sendkeys方法上傳文件我就不贅述,網上很多教程,但是缺點也很明顯。並不是完全適用各種場景。如果上傳文件不是input類型,就完全無法適用。就算是input也不能完全適用。亦沒辦法完全模擬用戶的操作。

解決方案

首先確定困難點:

  • 無法使用sendkeys方案
  • 無法跳過次操作,是核心前置操作

再確定方案方向:既然win上有pywin32 mac上是否有類似的庫?答案是有:Quartz類似 但是又不完全像win32,所以繼續找。既然無法完全控制系統文件框,換個思路:

  • “利用mac的快捷鍵,操作鍵盤鼠標來完成操作”

確定了方向,那就來嘗試實現,首先準備依賴:

  • PyUserInput
  • pyperclip

爲什麼要pyperclip 我嘗試後發現PyUserInput 輸入文件地址有個BUG,導致mac無法識別地址,於是在網上查了別人提供的一個比較好的方案。

貼代碼
首先拼接一個完整的mac可識別的路徑

# 獲取文件路徑
def get_file_path(filepath):  # /testFile/1.xlsx

    # 獲取上一級路徑
    up_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
    # 拼接filepath
    add_path = os.path.join(up_path, filepath)
    return add_path

然後根據路徑來查找文件,然後點擊文件,這樣的好處就是部署到Jenkins後,也能保證找到這個文件。可以寫到_init_中,但是我懶得寫了

def upload_file_mac(file):
    k = PyKeyboard()
    m = PyMouse()
    filepathheard = '/'
    k.press_keys(['Command', 'Shift', 'G'])
    x_dim, y_dim = m.screen_size()
    m.click(x_dim // 2, y_dim // 2, 1)
    # 複製文件路徑開頭的斜槓/
    pyperclip.copy(filepathheard)
    # 粘貼斜槓/
    k.press_keys(['Command', 'V'])
    # 拼接完整路徑
    fi = get_file_path(file)
    # 輸入文件全路徑進去
    k.type_string(fi)
    k.press_key('Return')
    time.sleep(2)
    k.press_key('Return')
    time.sleep(2)

總結

這個方案其中有一個BUG和一個需要注意的點
BUG:

  • 在執行當前輸入路徑地址的時候,必須切換爲英文輸入法,否則會導致輸入地址後無法跳轉。’

需要注意:

  • 在mac上必須打開安全性與隱私中的輔助功能完全控制
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章