Python WebDriver 文件上傳(二) Python WebDriver 文件上傳(一)

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

主要是由於工做中使用SendKeys方法不穩定,具體方法見:html

Python WebDriver 文件上傳(一)

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

因此採用這種新的方式來實現文件上傳功能,並完美的解決了這個問題。bootstrap

 

具體操做步驟以下:瀏覽器

一、下載工具 AutoIt及使用編輯器

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

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

      AutoIt v3.3.14.0 Released網站

 

  

       選擇下載文件ui

      

 

   選擇安裝路徑便可,其餘默認安裝。安裝後在程序中能夠找到這些應用。

            

 

   

       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.一、首先打開AutoIt Windows Info 工具,鼠標點擊Finder Tool,鼠標將變成一個小風扇形狀的圖標,按住鼠標左鍵拖動到須要識別的控件上。

 

 

 

 

 

經過AutoIt Windows Info 得到如下信息。

窗口的title爲「打開」,標題的Class爲「#32770」。

文件名輸入框的class 爲「Edit」,Instance爲「1」 ,因此ClassnameNN爲「Edit1」。

打開按鈕的class 爲「Button」,Instance爲「1」 ,因此ClassnameNN爲「Button1」。

 

1.二、根據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.三、保存的腳本能夠經過Run Script 工具將其打開運行,但咱們的目的是但願這個腳本被Python程序調用,那麼就須要將其生成exe程序。打開Compile Script to.exe工具,將其生成爲exe可執行文件。

 

 

 

 二、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");

項目中應用的代碼

相關文章
相關標籤/搜索