2012-03-12 42 views
7

Có cách nào để tải lên tệp trong Google Chrome vì Selenium RC "attach_file" chỉ hỗ trợ * Firefox không? Bất kỳ đề nghị hoặc cách giải quyết được nhiều đánh giá cao.Selenium: Tải tệp lên Google Chrome

+2

[Tôi đăng một câu trả lời bằng python đây.] [1] [1]: http://stackoverflow.com/a/11872608/471376 – JamesThomasMoon1979

Trả lời

3

Tệp tải lên thường là yêu cầu POST, vì vậy bạn thực sự có thể tải lên tệp mà không cần sử dụng Selenium; Trừ khi trang web của bạn yêu cầu các tập tin cookie, thì bạn cần phải xây dựng lại cookie với webdriver.get_cookies() đầu tiên

Một ví dụ đơn giản:

# 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

Nếu bạn đang sử dụng Webdriver sau đó tải lên tập tin tất cả các bạn cần là sử dụng " sendKeys "để nhập đường dẫn tệp. Bạn cần phải 'bỏ qua' phần nhấp vào nút duyệt để mở hộp thoại để chọn tệp. Một phiên bản Java làm việc cho tôi trông giống như dưới đây,

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

lẽ cũng đáng chú ý là bằng cách sử dụng sendKeys để tải lên một tập tin sẽ chỉ làm việc với một Ardesco

-1

Sử dụng IJavaScriptExecutor là thay đổi lĩnh vực đầu vào tải lên nhấp thể lái xe nên chrome sẽ không lỗi nói rằng yếu tố này là không nhấp được pop-up.

 [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

Mã mà không có ngữ cảnh là vô nghĩa. Bạn chưa giải thích tại sao bạn đang sử dụng Trình thực thi JavaScript để đặt phần tử hiển thị và IMHO. ngăn cản bạn tương tác với các phần tử ẩn vì đó là điều mà người dùng cuối không thể làm. avaScript để buộc phần tử hiển thị bạn nên thực tế làm những gì người dùng cuối sẽ làm để làm cho phần tử hiển thị. – Ardesco

+1

Bạn cũng sử dụng một Thread.sleep mà là một lần nữa thực hành xấu, điều chính xác để làm sẽ là sử dụng một đối tượng WebDriverWait và lớp ExpectedConditions để chờ đợi cho các yếu tố để trở thành có thể nhìn thấy. Đây là một ví dụ kém chất lượng không có lời giải thích và thực hành mã xấu -1 – Ardesco

Các vấn đề liên quan