33

Tôi là một nhà phát triển javascript/java và tôi đã cố gắng tìm hiểu cách thức khung công tác tự động hóa trình duyệt web selenium tải lên tệp từ hệ thống tệp. Không thể đặt đầu vào tệp qua javascript vì đó là vi phạm bảo mật. Tuy nhiên, bằng cách nào đó, người quản trị web có thể thực hiện việc này bằng lệnh sau:Trình quản trị web selenium tải tệp lên trình duyệt như thế nào?

driver.setFileDetector(new LocalFileDetector()); 
WebElement upload = driver.findElement(By.id("myfile")); 
upload.sendKeys("/Users/sso/the/local/path/to/darkbulb.jpg"); 
driver.findElement(By.id("submit")).click(); 

Vì vậy, họ đang đặt giá trị bằng cách gửi khóa cho nó? Tôi không hiểu. Tôi đã xem xét mã nguồn được tìm thấy tại đây: http://code.google.com/p/selenium/source/checkout Tôi vẫn không thể tìm thấy nơi họ thực hiện việc này.

Chỉnh sửa: Câu hỏi của tôi không phải là cách để làm điều này với selen, nhưng làm thế nào mà các nhà phát triển selen làm cho điều này có thể? Làm thế nào họ có được xung quanh các hạn chế an ninh trong javascript? Làm cách nào để họ tải lên tệp?

+0

đoán đầu tiên của tôi là các yếu tố nút có 'giá trị' với nó, và SendKeys thêm ký tự với giá trị? – djangofan

Trả lời

17

đẹp câu hỏi bạn thân ... họ đã viết một HTTP proxy để giải quyết những hạn chế Secuirty Javascript. Sử dụng proxy này có thể thực hiện nhiều bước của các ràng buộc của chính sách "cùng nguồn gốc máy chủ", nơi trình duyệt sẽ không cho phép Javascript thực hiện cuộc gọi đến bất kỳ thứ gì khác ngoài máy chủ mà trang hiện tại đã được phân phối.

Hơn nữa WebDriver sử dụng phương pháp thay thế các sự kiện kích hoạt ở cấp hệ điều hành. Vì những "sự kiện bản địa" này không được trình duyệt tạo ra, nên các phương pháp này sẽ phá vỡ các hạn chế bảo mật được đặt trên các sự kiện tổng hợp và vì chúng là hệ điều hành cụ thể, một khi chúng hoạt động cho một trình duyệt trên một nền tảng cụ thể sử dụng lại mã trong trình duyệt khác dễ dàng.

Hầu hết các nội dung trên được tham chiếu từ below..do ​​đọc tài liệu tham khảo sau để biết thêm chi tiết về Selenium internals

http://www.aosabook.org/en/selenium.html

+0

Xem câu trả lời của tôi bên dưới. – djangofan

0
//assuming driver is a healthy WebDriver instance 
    WebElement fileInput = driver.findElement(By.name("uploadfile")); 
    fileInput.sendKeys("C:/path/to/file.jpg"); 

hoặc

driver.findElement(By.id("inputFile")).sendKeys("C:/path/to/file.jpg"); 

Hãy thử điều này và cho tôi biết

+0

Xin lỗi vì tôi không hiểu rõ câu hỏi của tôi. Tôi đã làm rõ thêm câu hỏi. Tôi muốn biết làm thế nào mà các nhà phát triển của selen đã hoàn thành những gì bạn mô tả là có thể. – justspamjustin

0

Trong một số trường hợp đặc biệt với Java bạn cần tạo một đối tượng tập tin và chuyển absolutePath() cho Trình điều khiển, như sau:

File file = new File(sampleFile); 
driver.findElement(By.id("<Your input tag with type of File>")).sendKeys(file.getAbsolutePath()); 

Tệp mẫu là một chuỗi trỏ đến tệp cần tải lên. Tính năng này phù hợp với tôi trong Firefox và Chrome.

4

Các windowns tải lên tập tin mã chức năng HTML là:

<input id="fileField" type="file" onchange="document.getElementById('textfield').value=this.value" name="position"> 

<input type="submit" value="导入"> 

Bạn có thể sử dụng các mã sau đây để hoàn tất tải lên một tập tin cửa sổ. Nó hoạt động thành công và các mã không bao gồm nhấp vào hành động tải lên.

driver.FileDetector = new LocalFileDetector(); 
FindElement(By.Id("fileField")).SendKeys(@"C:\Users\admin\Desktop\ProfessionCodes.txt"); FindElement(By.CssSelector("input[type='submit']")).Click(); 
2

Tôi có ảnh Tải Lên trên Facebook Sử dụng Selenium Webdriver và AutoIt

Các bước như dưới đây

Bước 1

Bật code eclipse Upto (Tải lên một hình ảnh) là như sau:

WebElement Upload = Firefox.findElement(By.cssSelector("input[id^='u_']")); 
Upload.click(); 

Bước 2

Downloaded và cài đặt AutoIt: http://www.autoitscript.com/site/autoit/downloads/ (Tải xuống ZIP)

Bước 3

Viết mã như dưới đây trong notepad và lưu nó như PhotoUpload.au3

WinWaitActive("File Upload") 
Send("D:\Photo0116.jpg") 
Send("{ENTER}") 

Bước 4 : Nhấp chuột phải vào tệp này .au3 & biên dịch.

Bước 5: Thêm mã trong tập tin kịch bản như sau:

try { 
    String[] commands = new String[]{}; 
    // Location of the autoit executable 
    commands = new String[] {"D:\\My softwares\\install software\\selenium\\UploadPhoto3.exe"}; 
    Runtime.getRuntime().exec(commands); 
}  
catch (IOException e) {} 

Bước 6: Chạy kịch bản (PhotoUpload.java)

Bước 7: Ảnh được tải lên thành công.

+0

bạn có thể nói với một số ảnh chụp màn hình để mã hóa và cũng là giao diện người dùng không? –

0

này đã giúp tôi làm upload file,

Code:

public class FileUpload { 
     @Test 
     public void test() { 
      WebDriver driver = new FirefoxDriver(); 
      driver.get("http://www.freepdfconvert.com/pdf-word"); 
      driver.findElement(By.id("clientUpload")).click(); 
      driver.switchTo() 
        .activeElement() 
        .sendKeys(
          "/home/likewise-open/GLOBAL/123/Documents/filename.txt"); 
      driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); 
      driver.findElement(By.id("convertButton")); 
      /* 
      * driver.switchTo().activeElement() 
      * .sendKeys("selenium_2_testing_tools.pdf"); ; 
      */ 
     { 
       driver.wait(30000); 
      } catch (Exception er) { 
       System.out.println(er); 
      } 

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