วิธีอัพโหลดและดาวน์โหลดไฟล์โดยใช้ Selenium
⚡ สรุปอย่างชาญฉลาด
อัปโหลดและดาวน์โหลดไฟล์โดยใช้ Selenium เวิร์กโฟลว์ของ WebDriver อาศัยฟังก์ชัน sendKeys() ดั้งเดิมสำหรับช่องป้อนข้อมูล, AutoIt หรือ Robot สำหรับกล่องโต้ตอบ และคำสั่ง CDP ใน Selenium 4. เพื่อตั้งค่าเส้นทางการดาวน์โหลดที่ปลอดภัยระหว่างการทำงานอัตโนมัติ

การอัปโหลดไฟล์ใน WebDriver ทำได้ง่ายๆ โดยใช้เมธอด sendKeys() ในช่องป้อนข้อมูล file-select เพื่อป้อนพาธของไฟล์ที่จะอัปโหลด ในบทเรียนนี้ คุณจะได้เรียนรู้วิธีการจัดการกับการอัปโหลดและดาวน์โหลดไฟล์โดยใช้ WebDriver Selenium เว็บไดร์เวอร์
วิธีอัพโหลดไฟล์เข้า Selenium
สำหรับส่วนนี้เราจะใช้ https://demo.guru99.com/test/upload/ เป็นแอปพลิเคชันทดสอบของเรา ไซต์นี้อนุญาตให้ผู้เยี่ยมชมอัปโหลดไฟล์ได้อย่างง่ายดายโดยไม่ต้องลงทะเบียน

สมมติว่าเราต้องการอัปโหลดไฟล์ “C:\newhtml.html” รหัส WebDriver ของเราควรเป็นแบบที่แสดงด้านล่าง
นำเข้า org.openqa.selenium.*;
นำเข้า org.openqa.selenium.firefox.Firefoxคนขับรถ;
ชั้นสาธารณะ PG9 {
โมฆะคงที่สาธารณะ หลัก(เชือก[] อาร์กิวเมนต์) {
ระบบตั้งค่าคุณสมบัติ(“webdriver.gecko.driver”,“C:\\geckodriver.exe”);
เชือก baseUrl = “https://demo.guru99.com/test/upload/”;
ไดรเวอร์เว็บ คนขับ = ใหม่ Firefoxคนขับ();
driver.get(baseUrl);
เว็บเอเลเมนต์ uploadElement = driver.findElement(By.id(“อัปโหลดไฟล์_0”));
// ป้อนเส้นทางไฟล์ลงในช่องป้อนข้อมูลการเลือกไฟล์
uploadElement.sendKeys(“C:\\newhtml.html”);
// ติ๊กช่อง “ฉันยอมรับข้อกำหนดในการให้บริการ”
ไดรเวอร์.ค้นหาองค์ประกอบ(โดย id(“เงื่อนไข”)).คลิก();
// คลิกปุ่ม “อัปโหลดไฟล์”
ไดรเวอร์.ค้นหาองค์ประกอบ(โดย.ชื่อ("ส่ง")).คลิก();
}
}
หลังจากรันสคริปต์นี้ คุณควรจะสามารถอัปโหลดไฟล์ได้สำเร็จ และคุณควรได้รับข้อความที่คล้ายกันนี้
โปรดจำสองสิ่งต่อไปนี้เมื่ออัปโหลดไฟล์ใน WebDriver:
- ไม่จำเป็นต้องจำลองการคลิกปุ่ม “เรียกดู” WebDriver จะป้อนเส้นทางไฟล์ลงในช่องข้อความเลือกไฟล์โดยอัตโนมัติ องค์ประกอบ.
- เมื่อตั้งค่าเส้นทางไฟล์ใน Java IDE ให้ใช้อักขระหลีกที่เหมาะสมสำหรับแบ็กสแลช
การจัดการกล่องโต้ตอบการอัปโหลดที่ไม่ใช่การป้อนข้อมูลด้วย AutoIt
เมื่อหน้าเว็บใช้ปุ่ม Browse แบบกำหนดเองแทนที่จะใช้ปุ่ม Browse แบบดั้งเดิม การใช้ `sendKeys()` กับ element จะไม่ได้ผล ในกรณีนั้น คุณสามารถเรียกใช้สคริปต์ AutoIt จาก element ได้ Selenium พิมพ์เส้นทางไฟล์ลงในกล่องโต้ตอบของระบบปฏิบัติการ แล้วกด Enter
บันทึกสคริปต์ด้านล่างนี้เป็น อัปโหลด.au3รวบรวมเป็น upload.exeจากนั้นเรียกใช้จาก Java หลังจากคลิกปุ่ม Browse แล้ว
วินรอแอคทีฟ("เปิด")
ส่ง(“C:\newhtml.html”)
ส่ง("{เข้า}")
ราคาเริ่มต้น Javaเรียกใช้งานตัวช่วยหลังจากคลิกปุ่ม Browse:
Runtime.getRuntime().exec(“C:\\AutoIt\\upload.exe”);
คลาส java.awt.Robot เป็นคลาสบริสุทธิ์-Java เป็นทางเลือกเมื่อ AutoIt ไม่พร้อมใช้งาน แม้ว่า AutoIt จะมีความน่าเชื่อถือมากกว่าก็ตาม Windows เพราะมันรอการสนทนาตามชื่อเรื่อง
วิธีดาวน์โหลดไฟล์ในรูปแบบ Selenium ไดรเวอร์เว็บ
WebDriver ไม่มีความสามารถในการเข้าถึงกล่องโต้ตอบการดาวน์โหลด จะแสดงโดยเบราว์เซอร์เมื่อคุณคลิกลิงก์หรือปุ่มดาวน์โหลด อย่างไรก็ตาม เราสามารถข้ามกล่องโต้ตอบเหล่านี้ได้โดยใช้โปรแกรมแยกต่างหากที่เรียกว่า "wget"
Wget คืออะไร?
Wget เป็นโปรแกรมบรรทัดคำสั่งขนาดเล็กและใช้งานง่ายที่ใช้ในการดาวน์โหลดอัตโนมัติ- โดยพื้นฐานแล้ว เราจะเข้าถึง Wget จากสคริปต์ WebDriver ของเราเพื่อดำเนินการดาวน์โหลด
การตั้งค่า Wget
ขั้นตอน 1) ในไดรฟ์ C ของคุณ ให้สร้างโฟลเดอร์ใหม่และตั้งชื่อเป็น "Wget"
ดาวน์โหลด wget.exe จากที่นี่ และนำไปวางไว้ในโฟลเดอร์ Wget ที่คุณสร้างไว้ในขั้นตอนข้างต้น
ขั้นตอน 2) เปิด Run โดยการกด Windows กดปุ่ม “R” ค้างไว้ แล้วพิมพ์ “cmd” จากนั้นคลิกตกลง
พิมพ์คำสั่ง “cd /” เพื่อย้ายไปยังไดเร็กทอรีราก
ขั้นตอน 3) พิมพ์คำสั่งเพื่อตรวจสอบว่าการตั้งค่าที่ให้มานั้นใช้งานได้หรือไม่
ดูเหมือนว่าจะมีปัญหาในการเขียนลงในไดรฟ์ C
ขั้นตอน 4) คุณต้องแก้ไขข้อผิดพลาดของ wget ในบรรทัดคำสั่งก่อนที่จะเรียกใช้โค้ด Selenium WebDriver ข้อผิดพลาดเหล่านี้จะยังคงอยู่ต่อไป Eclipse และข้อความแสดงข้อผิดพลาดจะไม่ให้ข้อมูลมากนัก ทางที่ดีที่สุดคือลองใช้งาน wget บนบรรทัดคำสั่งดูก่อน หากใช้งานได้บนบรรทัดคำสั่ง ก็จะใช้งานได้ใน wget อย่างแน่นอน Eclipse.
ในตัวอย่างของเรา ดังที่แสดงในขั้นตอนที่ 3 มีปัญหาในการเขียนข้อมูลลงในไดรฟ์ C ลองเปลี่ยนตำแหน่งการดาวน์โหลดไปที่ไดรฟ์ D แล้วตรวจสอบผลลัพธ์ดู
Messenger ดาวน์โหลดสำเร็จแล้ว
ก่อนดำเนินการต่อ อย่าลืมลบไฟล์ที่ดาวน์โหลดมาก่อน
ใช้ WebDriver และ Wget
ในตัวอย่างต่อไปนี้ เราจะใช้ WebDriver และ wget เพื่อดาวน์โหลดซอฟต์แวร์แชทยอดนิยมที่เรียกว่า Yahoo Messengerฐานของเรา URL จะเป็น https://demo.guru99.com/test/yahoo.html.
ขั้นตอน 1) นำเข้าแพ็กเกจ “java.io.IOException” เนื่องจากเราจะต้องจับ IOException ในภายหลังในขั้นตอนที่ 4
ขั้นตอน 2) ใช้เมธอด getAttribute() เพื่อดึงค่า “href” ของลิงก์ดาวน์โหลดและบันทึกไว้ในตัวแปรประเภท String ในกรณีนี้ เราตั้งชื่อตัวแปรว่า “sourceLocation”
ขั้นตอน 3) ตั้งค่าไวยากรณ์สำหรับ wget โดยใช้คำสั่งต่อไปนี้
ขั้นตอน 4) เริ่มต้นกระบวนการดาวน์โหลดโดยการเรียก wget จากโค้ด WebDriver ของเรา
โดยสรุป โค้ด WebDriver ของคุณอาจมีลักษณะเหมือนกับที่แสดงด้านล่าง
นำเข้า java.io.IOException;
นำเข้า org.openqa.selenium.*;
นำเข้า org.openqa.selenium.firefox.Firefoxคนขับรถ;
ชั้นสาธารณะ PG8 {
โมฆะคงที่สาธารณะ หลัก(เชือก[] อาร์กิวเมนต์) {
ระบบตั้งค่าคุณสมบัติ(“webdriver.gecko.driver”,“C:\\geckodriver.exe”);
เชือก baseUrl = “https://demo.guru99.com/test/yahoo.html”;
ไดรเวอร์เว็บ คนขับ = ใหม่ Firefoxคนขับ();
driver.get(baseUrl);
เว็บเอเลเมนต์ downloadButton = driver.findElement(By.id(“ดาวน์โหลดแอปพลิเคชันส่งข้อความ”));
เชือก sourceLocation = downloadButton.getAttribute(“ฮเรฟ”);
เชือก wget_command = “cmd /c C:\\Wget\\wget.exe -PD: –no-check-certificate “ + ตำแหน่งแหล่งที่มา;
ลอง {
กระบวนการ exec = Runtime.getRuntime().exec(wget_command);
int exitVal = exec.waitFor();
System.out.println(“มูลค่าการขายออก: “ + ค่าออก);
} จับ (ข้อยกเว้นขัดจังหวะ | IOข้อยกเว้น อดีต) {
System.out.println(ex.toString());
}
ไดรเวอร์.ปิด();
}
}
หลังจากรันโค้ดนี้แล้ว ให้ตรวจสอบไดรฟ์ D ของคุณและตรวจสอบว่า Yahoo Messenger ดาวน์โหลดตัวติดตั้งสำเร็จแล้วที่นั่น
การตั้งค่าเส้นทางการดาวน์โหลดแบบกำหนดเองด้วย Selenium 4 ซีดีพี
Selenium 4. เปิดเผย Chrome DevTools Protocol ซึ่งช่วยให้คุณควบคุมพฤติกรรมการดาวน์โหลดของเบราว์เซอร์ได้โดยไม่ต้องใช้เครื่องมือของบุคคลที่สาม โค้ดตัวอย่างด้านล่างกำหนดให้การดาวน์โหลดทั้งหมดไปยังโฟลเดอร์ที่กำหนดเองและข้ามการแจ้งเตือน "บันทึกเป็น" ดังนั้นไฟล์จึงไปอยู่ในตำแหน่งที่การทดสอบคาดหวัง
แผนที่แสดงที่ตั้งบริษัท<เชือก,วัตถุ> พารามิเตอร์ = ใหม่ แฮชแมป<>();
พารามิเตอร์.ใส่("พฤติกรรม", "อนุญาต");
พารามิเตอร์.ใส่(“เส้นทางการดาวน์โหลด”, “D:\\selenium-downloads”);
ไดรเวอร์.executeCdpCommand(“Page.setDownloadBehavior”พารามิเตอร์);
ไดรเวอร์.รับ(“https://demo.guru99.com/test/yahoo.html”);
ไดรเวอร์.ค้นหาองค์ประกอบ(โดย id(“ดาวน์โหลดแอปพลิเคชันส่งข้อความ”)).คลิก();
คุณสามารถตรวจสอบการดาวน์โหลดได้โดยการตรวจสอบชื่อไฟล์ที่คาดหวังในไดเร็กทอรีเป้าหมายและตรวจสอบขนาดของไฟล์ ซึ่งทำให้การทดสอบเป็นไปอย่างแน่นอนโดยไม่ต้องใช้สคริปต์ภายนอก












