Làm cách nào để tải xuống tệp trong ngăn xếp công cụ Selenium?
Chúng tôi sẽ sử dụng các thư viện dưới đây để tự động hóa các hoạt động tải xuống tệp trong Selenium
- selen
- Junit5
- java11
Bước 1. Tạo WebDriver và Thêm Tùy chọn
Chrome có nhiều tùy chọn để bạn có thể thao tác. Trước hết, bạn cần đặt thư mục tự động tải xuống trong ChromeOptions, sau đó tạo trình điều khiển với tùy chọn đó. Với mục đích này, bạn cần đặt “tải xuống. default_directory” thành đường dẫn mà bạn mong muốn.
HashMap chromePrefs = new HashMap[]; chromePrefs.put["profile.default_content_settings.popups", 0]; chromePrefs.put["download.default_directory", System.getProperty["user.dir"]]; ChromeOptions options = new ChromeOptions[]; options.setExperimentalOption["prefs", chromePrefs]; WebDriver driver = new ChromeDriver[options];
Bước 2. Tải xuống tệp trong Selenium
Đây là một phần tùy chỉnh vì tất cả các bạn đều có các tình huống khác nhau. Tôi cho rằng tất cả các bạn đều triển khai phần này trong ứng dụng của mình. Nhưng chỉ trong trường hợp tôi thêm của tôi
//We find the download links List list =driver.findElements[By.cssSelector["div.module>p>a>img"]]; //Click to 5MB web element WebElement el = list.get[list.size[]-1]; el.click[]; Thread.sleep[500]; //Hide Google Popup Ad js.executeScript["document.querySelector[\"html > ins\"].style.display='none'"]; //Again click to 5MB web element el.click[]; //Wait 15 seconds to download 5MB file. //You can write custom wait. Check Selenium Wait article on swtestacademy.com Thread.sleep[15000];
Bước 3. Kiểm tra tệp trong thư mục
Chúng tôi tạo một Đối tượng thư mục với đường dẫn tải xuống. Sau đó lấy danh sách file trên thư mục đó và thực hiện thao tác REGEX để kiểm tra xem file đã được tải xuống hay chưa. Biểu thức chính quy của chúng tôi được mã hóa rất khó, bạn có thể cần thực hiện một số thao tác biểu thức chính quy phức tạp tùy theo nhu cầu của mình
File folder = new File[System.getProperty["user.dir"]]; //List the files on that folder File[] listOfFiles = folder.listFiles[]; boolean found = false; File f = null; //Look for the file in the files // You should write smart REGEX according to the filename for [File listOfFile : listOfFiles] { if [listOfFile.isFile[]] { String fileName = listOfFile.getName[]; System.out.println["File " + listOfFile.getName[]]; if [fileName.matches["5MB.zip"]] { f = new File[fileName]; found = true; } } } Assert.assertTrue[found, "Downloaded document is not found"]; f.deleteOnExit[];
Bây giờ, bạn có thể tải xuống một tệp trong dự án Selenium và thực hiện xác thực
Ghi chú. Để tải xuống nhiều tệp, bạn có thể lặp qua tất cả các phần tử web và nhấp vào từng phần tử một
Khi bạn sử dụng trình điều khiển web thông thường và tải xuống một tệp, tệp sẽ được tải xuống thư mục Tải xuống của máy bạn. Sau đó, nếu bạn muốn xác thực tệp hoặc đọc dữ liệu trong tệp đó, bạn cần truy cập vào thư mục Tải xuống trong máy của mình
Vấn đề ở đây là bạn sẽ không thể chạy cùng mã trên nền tảng CI/CD vì bạn đã mã hóa cứng đường dẫn đến thư mục Tải xuống bên trong mã của mình
Nhưng nếu bạn có thể tải tệp xuống một thư mục cụ thể thì sao?
Sau đó, bạn sẽ có thể sử dụng đường dẫn tương đối đến thư mục đó và xác minh tệp. Bạn cũng sẽ không gặp vấn đề gì khi chạy mã trên nền tảng CI/CD
Âm thanh tốt?
Trước tiên hãy tạo một thư mục cho các bản tải xuống của bạn
Tệp tải xuốngThư mục = Tệp mới[DOWNLOAD_FOLDER_PATH];
thư mục tải về. mkdir[];
Sau đó thêm tùy chọn cho trình điều khiển
Ví dụ cho Trình điều khiển Chrome
Map preferences= new HashMap[];
sở thích. đặt[“hồ sơ. default_content_settings. cửa sổ bật lên”, 0];
sở thích. đặt ["tải xuống. default_directory”,DOWNLOAD_FOLDER_PATH];
Tùy chọn ChromeOptions = ChromeOptions mới[];
tùy chọn. setExperimentalOption[“prefs”,preferences];
Trình điều khiển webdriver = ChromeDriver mới [tùy chọn];
Đó là nó. Chỉ những thay đổi nhỏ đối với mã của bạn và chúng tôi sẵn sàng thực hiện. Bây giờ khi bạn nhấp vào một tệp để tải xuống, nó sẽ được tải xuống thư mục bạn mới tạo