2012-03-12 114 views
7

Selenium RC「attach_file」僅支持* Firefox嗎?有什麼方法可以在谷歌瀏覽器中上傳文件?任何建議或解決方法都非常感謝。Selenium:在Google Chrome中上傳文件

+2

[我張貼使用python在這裏的答案。] [1] [1]:http://stackoverflow.com/a/11872608/471376 – JamesThomasMoon1979 2012-08-08 20:43:42

回答

3

上傳文件通常是一個POST請求,所以你實際上可以在不使用Selenium的情況下上傳文件;除非你的網站需要Cookie,然後你需要webdriver.get_cookies()首先重建餅乾

一個簡單的例子:

# required package: 
# http://pypi.python.org/pypi/MultipartPostHandler/0.1.0 

import MultipartPostHandler, urllib2, cookielib 

cookies = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies), 
           MultipartPostHandler.MultipartPostHandler) 

path_to_file = r"abc.zip" 

open_file = open(path_to_file,"rb") 
param = { "file": open_file } 
req = opener.open("http://www.yoursite.com/uploadfile", param) 
open_file.close() 
4

如果您使用的webdriver然後上傳文件,你需要的是用「 sendKeys「鍵入文件路徑。您需要「跳過」點擊瀏覽按鈕的部分,以打開一個對話框來選擇文件。這對我工作的Java版本看起來像下面,

WebElement inputFilePath = driver.findElement(By.id("filepath")); 
inputFilePath.sendKeys("/absolute/path/to/my/local/file"); 
+0

也許還值得注意的是,使用sendKeys上傳文件只能用於 Ardesco 2013-03-18 09:02:05

-1

使用IJavaScriptExecutor是改變上傳輸入欄點擊能夠使駕駛員鉻不會彈出錯誤說這個元素是不可點擊。

 [SetUp] 
     public void SetupTest() 
     { 
      driver = new ChromeDriver(); 
      baseURL = ""; 
      verificationErrors = new StringBuilder(); 
     } 

     [Test] 
     public void Test() 
     { 
      IJavaScriptExecutor js = driver as IJavaScriptExecutor; 
      IWebElement element = driver.FindElement(By.Id("UploadFile_ButtonID")); 
      js.ExecuteScript("arguments[0].style.visibility = 'visible'; arguments[0].style.height = '1px'; arguments[0].style.width = '1px'; arguments[0].style.opacity = 1", element); 
      Thread.Sleep(1000); 
      element.SendKeys("D:\\path\\test\\image.jpg"); 
} 
+1

沒有上下文的代碼是毫無意義的,你沒有解釋爲什麼你使用JavaScript Executor來設置元素可見,恕我直言,這可能是不好的做法。阻止您與隱藏元素進行交互,因爲這是最終用戶無法做到的事情,而不是盲目使用J avaScript強制元素可見,您應該實際上做最終用戶會做什麼來使元素可見。 – Ardesco 2013-03-18 09:00:05

+1

您還使用Thread.sleep這又是一個不好的做法,要做的正確的事情是使用WebDriverWait對象和ExpectedConditions類來等待元素變爲可見。這是一個粗劣的例子,沒有解釋和錯誤的代碼練習-1 – Ardesco 2013-03-18 09:00:36