1. 程式人生 > >Python Selenium 文件上傳(二)

Python Selenium 文件上傳(二)

rip info python 拼接 type 項目 shee editor 可執行文件

  今天補充一種文件上傳的方法

主要是因為工作中使用SendKeys方法不穩定,具體方法見:

Python Selenium 文件上傳(一)

這種方法直接通過命令行執行腳本時沒有問題,可以成功上傳,但是如果通過saltstack 遠程控制執行時,SendKeys就定位不到窗口了。

所以采用這種新的方式來實現文件上傳功能,並完美的解決了這個問題。

具體操作步驟如下:

1、下載工具 AutoIt及使用

 AutoIt目前最新是v3版本,這是一個使用類似BASIC腳本語言的免費軟件,它設計用於Windows GUI(圖形用戶界面)中進行自動化操作。它利用模擬鍵盤按鍵,鼠標移動和窗口/控件的組合來實現自動化任務。

官方網站:https://www.autoitscript.com/site/

   AutoIt v3.3.14.0 Released

  技術分享

      選擇下載文件

      技術分享

  選擇安裝路徑即可,其他默認安裝。安裝後在程序中可以找到這些應用。

技術分享

  

AutoIt Windows Info 用於幫助我們識Windows控件信息。

  Compile Script to.exe 用於將AutoIt生成 exe 執行文件。

  Run Script 用於執行AutoIt腳本。

  SciTE Script Editor 用於編寫AutoIt腳本。

  文件上傳實例

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>upload_file</title>
<link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" />
</head> <body> <div class="row-fluid"> <div class="span6 well"> <h3>upload_file</h3> <input type="file" name="file" /> </div> </div> </body> <script src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.js"></script> </html>

將上面的html代碼保存為uplad.html文件,通過瀏覽器打開,效果如下:

技術分享

以操作upload.html上傳彈出的窗口為例講解AutoIt實現上傳過程。

1.1、首先打開AutoIt Windows Info 工具,鼠標點擊Finder Tool,鼠標將變成一個小風扇形狀的圖標,按住鼠標左鍵拖動到需要識別的控件上。

技術分享

技術分享

通過AutoIt Windows Info 獲得以下信息。

窗口的title為“打開”,標題的Class為“#32770”。

文件名輸入框的class 為“Edit”,Instance為“1” ,所以ClassnameNN為“Edit1”。

打開按鈕的class 為“Button”,Instance為“1” ,所以ClassnameNN為“Button1”。

1.2、根據AutoIt Windows Info 所識別到的控件信息打開SciTE Script Editor編輯器,編寫腳本。

;該腳本的寫法是 ;是註釋會註釋後面的內容,所以單行結尾加不加;都可以
    ;ControlFocus ( "title", "窗口文本", controlID)   設置輸入焦點到指定窗口的某個控件上;
    ;WinWait ( "title題" , "窗口文本" , 超時時間 )  暫停腳本的執行直至指定窗口存在(出現)為止;
    ;ControlSetText ( "title", "窗口文本", controlID, "新文本" )   修改指定控件的文本;
    ;Sleep ( 延遲 )   使腳本暫停指定時間段;
    ;ControlClick ( "title", "窗口文本", 控件ID , 按鈕 , 點擊次數 )   向指定控件發送鼠標點擊命令;
    ;其中,title即AutoIt Window Info識別出的Title字段,controlID即AutoIt Window Info識別出的Class和Instance的拼接,如上圖拼接後的結果應為:Button1;

;title必須對應正確即窗口的title,"text"可寫可不寫,
ControlFocus("打開","text","Edit1")
WinWait("[CLASS:#32770]","",10)
;ControlSetText("打開","","Edit1","D:\upload_file.txt")  這裏的“text” 不必寫,寫就不能正確執行了
ControlSetText("打開","","Edit1","D:\upload_file.txt")
Sleep(2000)
ControlClick("打開","","Button1")

ControlFocus()方法用於識別Window窗口。WinWait()設置10秒鐘用於等待窗口的顯示,其用法與WebDriver 所提供的implicitly_wait()類似。ControlSetText()用於向“文件名”輸入框內輸入本地文件的路徑。這裏的Sleep()方法與Python中time模塊提供的Sleep()方法用法一樣,不過它是以毫秒為單位,Sleep(2000)表示固定休眠2000毫秒。ControlClick()用於點擊上傳窗口中的“打開”按鈕。

保存後會生成au3後綴的文件

技術分享

  AutoIt的腳本已經寫好了,可以通過菜單欄“Tools”-->“Go” (或按鍵盤F5)來運行一個腳本吧!註意在運行時上傳窗口當前處於打開狀態。運行後即可看到會自動輸入文件路徑並自動點擊“打開”完成文件上傳。

1.3、保存的腳本可以通過Run Script 工具將其打開運行,但我們的目的是希望這個腳本被Python程序調用,那麽就需要將其生成exe程序。打開Compile Script to.exe工具,將其生成為exe可執行文件。

技術分享

2、python 實現文件上傳

通過Python 的os模塊的system()方法可以調用exe程序並執行。

代碼如下:

import os


releaseFile = r"D:\Automationtest\caseData\itemRelease.exe"
os.system(releaseFile)

其中itemRelease.exe中的代碼如下

ControlFocus("文件上傳","text","Edit1");
WinWait("[CLASS:#32770]","",10);
ControlSetText("文件上傳","","Edit1","D:\Automationtest\caseData\itemRelease.xlsx");
Sleep(2000);
ControlClick("文件上傳","","Button1");

項目中應用的代碼

技術分享

Python Selenium 文件上傳(二)