Cách tải lên và tải xuống tệp bằng cách sử dụng Selenium

⚡ Tóm tắt thông minh

Tải lên và tải xuống tệp bằng cách sử dụng Selenium Quy trình làm việc của WebDriver dựa vào hàm sendKeys() gốc cho các trường nhập liệu, AutoIt hoặc Robot cho các hộp thoại và các lệnh CDP trong Selenium 4. Thiết lập đường dẫn tải xuống an toàn trong quá trình chạy tự động hóa.

  • 📤 Phương thức tải lên: Sử dụng sendKeys() trên phần tử nhập tệp để gửi đường dẫn tuyệt đối đến tệp mà không cần nhấp vào nút Duyệt.
  • 📥 Đường dẫn tải xuống: Cấu hình thư mục tải xuống tùy chỉnh thông qua ChromeOptions hoặc CDP Page.setDownloadBehavior trong Selenium 4.
  • 🪟 Hội thoại bản địa: Kích hoạt các tập lệnh AutoIt hoặc java.awt.Robot khi trình chọn tập tin của hệ điều hành ngăn WebDriver tương tác.
  • 🤖 Hỗ trợ AI: Trí tuệ nhân tạo tạo sinh (Generative AI) đề xuất các bộ chọn, xây dựng các tệp dữ liệu thử nghiệm và tự động xác thực tính toàn vẹn của các tệp đã tải xuống.
  • 🛡️ Kiểm tra xác thực: Xác nhận quá trình tải lên thành công thông qua các thông báo phản hồi và xác minh việc tải xuống bằng cách so sánh kích thước tệp hoặc mã kiểm tra.

Cách tải lên và tải xuống tệp bằng cách sử dụng Selenium

Việc tải lên tập tin trong WebDriver được thực hiện bằng cách sử dụng phương thức `sendKeys()` trên trường nhập chọn tập tin để nhập đường dẫn của tập tin cần tải lên. Trong hướng dẫn này, bạn sẽ học cách xử lý việc tải lên và tải xuống tập tin bằng cách sử dụng WebDriver. Selenium WebDriver.

Cách tải tệp lên trong Selenium

Đối với phần này, chúng tôi sẽ sử dụng https://demo.guru99.com/test/upload/ như ứng dụng thử nghiệm của chúng tôi. Trang web này dễ dàng cho phép bất kỳ khách truy cập nào tải tệp lên mà không yêu cầu họ đăng ký.

Tải tập tin lên Selenium
Xử lý cửa sổ bật lên tải tệp lên trong Selenium webdriver

Giả sử chúng ta muốn tải lên tệp “C:\newhtml.html”. Mã WebDriver của chúng ta sẽ giống như mã được hiển thị bên dưới.

gói dự án mới;
nhập khẩu org.openqa.selenium.*;
nhập khẩu org.openqa.selenium.firefox.FirefoxTài xế;
giai cấp công cộng PG9 {
khoảng trống tĩnh công cộng chủ chốt(Chuỗi[] args) {
System.setProperty(“webdriver.gecko.driver”,“C:\\geckodriver.exe”);
Chuỗi baseUrl = “https://demo.guru99.com/test/upload/”;
webdriver người lái xe = người mới FirefoxTài xế();

trình điều khiển.get(baseUrl);
WebYếu tố uploadElement = driver.findElement(By.id(“uploadfile_0”));

// Nhập đường dẫn tệp vào trường nhập chọn tệp
uploadElement.sendKeys(“C:\\newhtml.html”);

// Chọn ô "Tôi chấp nhận điều khoản dịch vụ"
trình điều khiển.findElement(By.id("điều kiện")).click();

// Nhấp vào nút “Tải lên tệp”
trình điều khiển.findElement(By.name("gửi")).click();
}
}

Sau khi chạy tập lệnh này, bạn sẽ có thể tải tệp lên thành công và bạn sẽ nhận được thông báo tương tự như thế này.

Tải tập tin lên Selenium

Hãy nhớ hai điều sau đây khi tải tệp lên trong WebDriver:

  1. Không cần phải mô phỏng thao tác nhấp chuột vào nút “Browse”. WebDriver tự động nhập đường dẫn tệp vào ô văn bản chọn tệp. yếu tố.
  2. Khi thiết lập đường dẫn tệp trong Java IDE, hãy sử dụng ký tự thoát thích hợp cho dấu gạch chéo ngược.

Tải tập tin lên Selenium

Xử lý hộp thoại tải lên không phải dạng nhập liệu bằng AutoIt

Khi trang sử dụng nút Duyệt tùy chỉnh thay vì nút mặc định. Phương thức sendKeys() không hoạt động. Trong trường hợp đó, bạn có thể gọi một tập lệnh AutoIt từ... Selenium Nhập đường dẫn tệp vào hộp thoại hệ điều hành và nhấn Enter.

Lưu tập lệnh bên dưới dưới dạng upload.au3, biên dịch nó thành upload.exesau đó gọi nó từ Java sau khi nhấn nút Duyệt.

; upload.au3 – chờ hộp thoại Mở xuất hiện và nhập đường dẫn tệp
WinWaitActive("Mở")
Gửi(“C:\newhtml.html”)
Gửi("{ĐI VÀO}")

Từ Java, kích hoạt trình trợ giúp sau khi nhấp vào nút Duyệt:

trình điều khiển.findElement(By.id(“BrowseBtn”)).click();
Runtime.getRuntime().exec(“C:\\AutoIt\\upload.exe”);

Lớp java.awt.Robot là một lớp thuần túy-Java đây là giải pháp thay thế khi AutoIt không khả dụng, mặc dù AutoIt đáng tin cậy hơn. Windows vì nó chờ đợi hộp thoại theo tiêu đề.

Cách tải xuống một tập tin trong Selenium webdriver

WebDriver không có khả năng truy cập vào hộp thoại Tải xuống được trình duyệt trình bày khi bạn nhấp vào liên kết hoặc nút tải xuống. Tuy nhiên, chúng ta có thể bỏ qua các hộp thoại này bằng cách sử dụng một chương trình riêng biệt có tên là “wget”.

Wget là gì?

Wget là một chương trình dòng lệnh nhỏ và dễ sử dụng được sử dụng để tự động tải xuống. Về cơ bản, chúng tôi sẽ truy cập Wget từ tập lệnh WebDriver của mình để thực hiện quá trình tải xuống.

Thiết lập Wget

Bước 1) Trong Ổ C của bạn, tạo một thư mục mới và đặt tên là “Wget”.

Tải xuống wget.exe từ đây và đặt nó vào thư mục Wget mà bạn đã tạo ở bước trên.

Thiết lập Wget

Bước 2) Mở Run bằng cách nhấn Windows Nhấn phím “R”; nhập “cmd” và nhấn OK.

Thiết lập Wget

Nhập lệnh “cd /” để chuyển đến thư mục gốc.

Thiết lập Wget

Bước 3) Nhập lệnh để kiểm tra xem thiết lập đã cho có hoạt động hay không.

cmd /c C:\\Wget\\wget.exe -PC: –no-check-certificate https://demo.guru99.com/selenium/msgr11us.exe

Thiết lập Wget

Có vẻ như có vấn đề khi ghi vào ổ C.

Bước 4) Bạn cần gỡ lỗi các lỗi wget trong dòng lệnh trước khi thực thi mã. Selenium WebDriver. Những lỗi này sẽ tiếp diễn trong Eclipse và các thông báo lỗi sẽ không cung cấp đầy đủ thông tin. Tốt nhất là trước tiên hãy thử chạy wget bằng dòng lệnh. Nếu nó hoạt động trên dòng lệnh, chắc chắn nó cũng sẽ hoạt động trong môi trường ảo. Eclipse.

Trong ví dụ của chúng ta, như đã trình bày ở Bước 3, có vấn đề khi ghi vào ổ C. Hãy thử thay đổi vị trí tải xuống sang ổ D và kiểm tra kết quả.

cmd /c C:\\Wget\\wget.exe -PD: –no-check-certificate https://demo.guru99.com/selenium/msgr11us.exe

Thiết lập Wget

Messenger đã được tải xuống thành công.

Trước khi tiếp tục, đừng quên xóa tệp đã tải xuống.

Sử dụng WebDriver và Wget

Trong ví dụ sau, chúng tôi sẽ sử dụng WebDriver và wget để tải xuống phần mềm trò chuyện phổ biến có tên là Yahoo MessengerCăn cứ của chúng tôi URL sẽ https://demo.guru99.com/test/yahoo.html.

Sử dụng WebDriver và Wget

Bước 1) Nhập gói “java.io.IOException” vì chúng ta sẽ phải bắt lỗi IOException ở Bước 4 sau.

Sử dụng WebDriver và Wget

Bước 2) Sử dụng getAttribute() để lấy giá trị “href” của liên kết tải xuống và lưu nó dưới dạng biến chuỗi. Trong trường hợp này, chúng ta đặt tên biến là “sourceLocation”.

Sử dụng WebDriver và Wget

Bước 3) Thiết lập cú pháp cho wget bằng lệnh sau.

Sử dụng WebDriver và Wget

Bước 4) Bắt đầu quá trình tải xuống bằng cách gọi wget từ mã WebDriver của chúng tôi.

Sử dụng WebDriver và Wget

Tóm lại, mã WebDriver của bạn có thể trông giống như mã được hiển thị bên dưới.

gói dự án mới;
nhập khẩu java.io.IOException;

nhập khẩu org.openqa.selenium.*;
nhập khẩu org.openqa.selenium.firefox.FirefoxTài xế;
giai cấp công cộng PG8 {
khoảng trống tĩnh công cộng chủ chốt(Chuỗi[] args) {

System.setProperty(“webdriver.gecko.driver”,“C:\\geckodriver.exe”);
Chuỗi baseUrl = “https://demo.guru99.com/test/yahoo.html”;
webdriver người lái xe = người mới FirefoxTài xế();

trình điều khiển.get(baseUrl);
WebYếu tố downloadButton = driver.findElement(By.id(“messenger-download”));
Chuỗi sourceLocation = downloadButton.getAttribute(“href”);
Chuỗi wget_command = “cmd /c C:\\Wget\\wget.exe -PD: –no-check-certificate “ + sourceLocation;

thử {
Quy trình exec = Runtime.getRuntime().exec(wget_command);
int exitVal = exec.waitFor();
System.out.println(Giá trị thoát: “ + exitVal);
} bắt (Bị gián đoạn | IOException bán tại) {
System.out.println(ex.toString());
}
driver.close();
}
}

Sau khi thực thi mã này, hãy kiểm tra ổ D của bạn và xác minh rằng Yahoo Messenger trình cài đặt đã được tải xuống thành công ở đó.

Sử dụng WebDriver và Wget

Thiết lập đường dẫn tải xuống tùy chỉnh với Selenium 4 CDP

Selenium Mục 4 hiển thị Giao thức Công cụ dành cho Nhà phát triển Chrome, cho phép bạn kiểm soát hành vi tải xuống của trình duyệt mà không cần công cụ của bên thứ ba. Đoạn mã bên dưới trỏ tất cả các tệp tải xuống đến một thư mục tùy chỉnh và bỏ qua lời nhắc Lưu dưới dạng, do đó các tệp sẽ được lưu vào đúng vị trí mà bài kiểm tra mong đợi.

Trình điều khiển Chrome người lái xe = người mới ChromeDriver ();
Bản đồ<Chuỗi,Đối tượng> tham số = người mới HashMap<>();
params.put("hành vi", "cho phép");
params.put(“downloadPath”, “D:\\selenium-downloads”);
trình điều khiển.thực thi lệnh Cdp(“Page.setDownloadBehavior”, tham số);
trình điều khiển.get(“https://demo.guru99.com/test/yahoo.html”);
trình điều khiển.findElement(By.id(“messenger-download”)).click();

Bạn có thể xác minh quá trình tải xuống bằng cách kiểm tra thư mục đích để tìm tên tệp dự kiến ​​và kích thước của nó, điều này giúp quá trình kiểm tra trở nên chắc chắn mà không cần đến các tập lệnh bên ngoài.

Câu Hỏi Thường Gặp

Selenium gọi hàm sendKeys() trên Phần tử chứa đường dẫn tuyệt đối đến tệp. Trình duyệt sẽ tự động điền vào trường này, do đó không cần mở trình chọn tệp của hệ điều hành và không cần nhấp vào nút Duyệt.

Khi trang không có ô nhập tệp, hãy sử dụng AutoIt. Windows hoặc lớp java.awt.Robot. Các công cụ này nhập đường dẫn vào hộp thoại hệ điều hành đang hoạt động và nhấn Enter sau khi đã nhấp vào nút Duyệt.

Gọi lệnh executeCdpCommand(“Page.setDownloadBehavior”, params) với hành vi được đặt thành cho phép và downloadPath được đặt thành thư mục của bạn. Selenium Tùy chọn 4 chuyển tiếp lệnh đến Chrome DevTools và bỏ qua lời nhắc "Lưu dưới dạng".

Đúng vậy. Trợ lý AI sẽ đọc biểu mẫu tải lên của bạn, đề xuất các bộ chọn, tạo các tệp giới hạn như tệp trống, tệp quá khổ hoặc tệp có phần mở rộng sai, và viết khối sendKeys(). Điều này giúp rút ngắn thời gian thiết lập và phát hiện các trường hợp ngoại lệ mà người kiểm thử thường bỏ sót.

Công cụ AI Hệ thống sẽ quét thư mục đích, so sánh kích thước tệp và mã kiểm tra với các giá trị dự kiến, và đánh dấu các điểm không khớp. Các mô hình thị giác thậm chí có thể mở các tệp PDF hoặc hình ảnh và xác nhận nội dung khớp với nhãn liên kết, loại bỏ việc xem xét thủ công khỏi các lần chạy hồi quy.

Wget bỏ qua hoàn toàn trình duyệt và lưu tệp trực tiếp vào ổ đĩa thông qua quy trình dòng lệnh. Nó hữu ích trên các hệ thống cũ. Selenium Có 2 hoặc 3 cấu hình không hỗ trợ tùy chọn tải xuống CDP và ChromeOptions.

Tóm tắt bài viết này với: