2013-05-16 59 views
5

Tôi đang cố gắng viết các kiểm tra selen cho một trang web bằng cách sử dụng java. Tuy nhiên, tôi đã gặp phải vấn đề khi thử nghiệm tải lên tệp ..Cách xử lý cửa sổ tải lên tệp windows khi sử dụng selenium

Khi tôi nhấp vào nút tải lên tệp, nó sẽ tự động mở tệp tải lên cửa sổ. Tôi có mã làm việc để đặt văn bản trong hộp tải lên thành công, nó chỉ là không có gì tôi có thể làm để ngăn chặn các cửa sổ hộp đến tự động, và có trang web không tự động mở cửa sổ tập tin tải lên không thực sự là một lựa chọn. Từ việc nghiên cứu chủ đề này, tôi hiểu không có cách nào để trình duyệt web selenium xử lý việc này. Câu hỏi của tôi là: cách tôi có thể đơn giản đóng cửa sổ tải lên theo cách tự động là gì?

Tôi đã thử lớp robot java và nó không hoạt động. Nó chờ đợi cho đến khi cửa sổ upload đã được đóng trước khi thực hiện bất kỳ lệnh tôi đã cho nó (ALT-F4, nhấn ở một vị trí xy, vv)

Cảm ơn trước

EDIT:

wait.until(ExpectedConditions.elementToBeClickable(By.id(("addResourcesButton")))); 
driver.findElement(By.id("addResourcesButton")).click(); 

//popup window comes up automatically at this point 


try { 
    Robot robot = new Robot(); 
    robot.mouseMove(875, 625); 
    robot.mousePress(InputEvent.BUTTON1_MASK); 
    robot.mouseRelease(InputEvent.BUTTON1_MASK); 
} catch (AWTException e) { 
    e.printStackTrace(); 
} 

//my attempt to move the mouse and click, doesn't move or click until after I close the windows upload box 

String fileToUpload = "C:\\file.png"; 


WebElement uploadElement = driver.findElement(By.id("fileInput")); 
uploadElement.sendKeys(fileToUpload); 

//Takes the code and successfully submits it to the text area, where I can now upload it 
+0

Bạn đang nói về Selenium RC, hoặc WebDriver ? Trước đây có ['attachFile()'] (http://selenium.googlecode.com/svn/trunk/docs/api/java/com/thoughtile/selenium/Selenium.html#attachFile%28java.lang.String, Phương thức% 20java.lang.String% 29), sau này sử dụng ['sendKeys()'] (http://stackoverflow.com/a/10717319/1273080) (liên kết cũng có một số lời khuyên về cách sử dụng lớp 'Robot' trong đó, nếu được sử dụng đúng cách, cũng luôn hoạt động). –

+0

Lời xin lỗi của tôi, tôi đang nói về WebDriver nói riêng ở đây. Vấn đề với lớp robot là nó chỉ đợi cho đến khi hộp thoại cửa sổ đóng lại trước khi nó chạy bất cứ điều gì tôi nói với nó. Tôi đã có một vấn đề tương tự cho một hộp cảnh báo hệ điều hành và tôi đã có thể để có được robot để làm việc ở đó, nó chỉ có vẻ là cho các cửa sổ tải lên mà nó sẽ không chạy cho đến khi sau khi cửa sổ tải lên được đóng lại. – Zoltorn

+0

Tuyệt đối không. Bạn có thể cho chúng tôi thấy mã của bạn không? Tôi có thể sử dụng lớp 'Robot' một cách đáng tin cậy để tải lên một tệp. Dù sao, cách tốt hơn là sử dụng phương thức 'sendKeys()' trên phần tử ''. Bạn đã thử điều đó chưa? –

Trả lời

5

Bạn có thể làm một nhấp chuột nonblocking bằng cách sử dụng hoặc là một trong những:

The Advanced User Interactions API (JavaDocs)

WebElement element = driver.findElement(By.whatever("anything")); 
new Actions(driver).click(element).perform(); 

hoặc JavaScript:

JavascriptExecutor js = (JavascriptExecutor)driver; 

WebElement element = driver.findElement(By.whatever("anything")); 
js.executeScript("arguments[0].click()", element); 
+0

Kết quả đầu tiên làm việc cho tôi, nhưng sau đó tôi phải thực hiện một hành động(). Cảm ơn! – Zoltorn

+0

@ user2246596 Vâng, xin lỗi về điều đó, tôi đã quên điều đó. Dù sao, tôi vui vì tôi có thể giúp! –

0

Tôi đã trả lời câu hỏi này cho một câu hỏi tương tự. Có các giải pháp khác được cung cấp cho Tải lên - Giống như sử dụng AutoIT. Nhưng cá nhân tôi sẽ trì hoãn tương tác với bất kỳ cuộc đối thoại cụ thể của hệ điều hành nào. Tương tác với các cuộc đối thoại cụ thể của hệ điều hành sẽ giới hạn bạn để chạy các thử nghiệm từ một môi trường nhất định.

Selenium webdriver java - upload file with phantomjs driver

Luôn xác định & tương tác với các yếu tố của kiểu "tập tin" khi cập nhật có liên quan. Điều này sẽ giải quyết vấn đề cửa sổ bật lên của bạn.

Ex: Trong ứng dụng của tôi, các yếu tố liên quan upload có dưới DOM -

<a id="uploadFileButtonLink" class="uploadFileButtonLink" href="javascript:void(0)" data-uidsfdc="3" style="display: none;">Upload a file</a> 
<input id="multiFileInput" class="multifile-upload-input-button" type="file" name="chatterFile_upload" multiple="multiple"/> 
<input id="multiUploadBtn" class="btnImportant" type="button" value="Upload Files"/> 

Trong trường hợp này, bạn có thể sử dụng phương pháp SendKeys để "multiFileInput" mà là loại "File". Bằng cách này nó sẽ làm việc cho tất cả FF, Chrome & cũng trình duyệt không đầu.

+0

Vấn đề là không có cách nào để tôi không nhận được hộp cảnh báo. Khi tôi nhấn tải lên, nó sau đó đưa tôi đến một trang mới, nơi tôi có thể sau đó nhìn thấy trường văn bản mà tôi có thể đưa văn bản vào, nhưng ngoài ra nó sẽ khởi chạy hộp tải lên cửa sổ. Tôi có thể tải lên và gửi tệp một cách chính xác, tôi chỉ không thể tìm ra việc cần làm để loại bỏ cửa sổ bật lên đó. Cho đến bây giờ tôi đã phải tự hủy bỏ. – Zoltorn

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