วิธีอัพโหลดและดาวน์โหลดไฟล์โดยใช้ Selenium

⚡ สรุปอย่างชาญฉลาด

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

  • 📤 วิธีการอัปโหลด: ใช้ sendKeys() กับองค์ประกอบอินพุตไฟล์เพื่อส่งพาธไฟล์แบบเต็มโดยไม่ต้องคลิกปุ่ม Browse
  • 📥 เส้นทางการดาวน์โหลด: กำหนดค่าไดเร็กทอรีดาวน์โหลดแบบกำหนดเองผ่าน ChromeOptions หรือ CDP Page.setDownloadBehavior ใน Selenium 4.
  • 🪟 บทสนทนาพื้นฐาน: เรียกใช้สคริปต์ AutoIt หรือ java.awt.Robot เมื่อตัวเลือกไฟล์ของระบบปฏิบัติการขัดขวางการทำงานร่วมกันของ WebDriver
  • 🤖 ความช่วยเหลือจาก AI: AI แบบสร้างสรรค์จะแนะนำตัวเลือก สร้างไฟล์ข้อมูลทดสอบ และตรวจสอบความถูกต้องของไฟล์ที่ดาวน์โหลดโดยอัตโนมัติ
  • 🛡️ การตรวจสอบความถูกต้อง: ยืนยันความสำเร็จในการอัปโหลดผ่านข้อความตอบกลับ และตรวจสอบการดาวน์โหลดโดยการเปรียบเทียบขนาดไฟล์หรือค่าตรวจสอบความถูกต้อง (checksum)

วิธีอัพโหลดและดาวน์โหลดไฟล์โดยใช้ Selenium

การอัปโหลดไฟล์ใน WebDriver ทำได้ง่ายๆ โดยใช้เมธอด sendKeys() ในช่องป้อนข้อมูล file-select เพื่อป้อนพาธของไฟล์ที่จะอัปโหลด ในบทเรียนนี้ คุณจะได้เรียนรู้วิธีการจัดการกับการอัปโหลดและดาวน์โหลดไฟล์โดยใช้ WebDriver Selenium เว็บไดร์เวอร์

วิธีอัพโหลดไฟล์เข้า Selenium

สำหรับส่วนนี้เราจะใช้ https://demo.guru99.com/test/upload/ เป็นแอปพลิเคชันทดสอบของเรา ไซต์นี้อนุญาตให้ผู้เยี่ยมชมอัปโหลดไฟล์ได้อย่างง่ายดายโดยไม่ต้องลงทะเบียน

อัพโหลดไฟล์เข้า Selenium
จัดการป๊อปอัปการอัปโหลดไฟล์ใน Selenium ไดรเวอร์เว็บ

สมมติว่าเราต้องการอัปโหลดไฟล์ “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(“เงื่อนไข”)).คลิก();

// คลิกปุ่ม “อัปโหลดไฟล์”
ไดรเวอร์.ค้นหาองค์ประกอบ(โดย.ชื่อ("ส่ง")).คลิก();
}
}

หลังจากรันสคริปต์นี้ คุณควรจะสามารถอัปโหลดไฟล์ได้สำเร็จ และคุณควรได้รับข้อความที่คล้ายกันนี้

อัพโหลดไฟล์เข้า Selenium

โปรดจำสองสิ่งต่อไปนี้เมื่ออัปโหลดไฟล์ใน WebDriver:

  1. ไม่จำเป็นต้องจำลองการคลิกปุ่ม “เรียกดู” WebDriver จะป้อนเส้นทางไฟล์ลงในช่องข้อความเลือกไฟล์โดยอัตโนมัติ องค์ประกอบ.
  2. เมื่อตั้งค่าเส้นทางไฟล์ใน Java IDE ให้ใช้อักขระหลีกที่เหมาะสมสำหรับแบ็กสแลช

อัพโหลดไฟล์เข้า Selenium

การจัดการกล่องโต้ตอบการอัปโหลดที่ไม่ใช่การป้อนข้อมูลด้วย AutoIt

เมื่อหน้าเว็บใช้ปุ่ม Browse แบบกำหนดเองแทนที่จะใช้ปุ่ม Browse แบบดั้งเดิม การใช้ `sendKeys()` กับ element จะไม่ได้ผล ในกรณีนั้น คุณสามารถเรียกใช้สคริปต์ AutoIt จาก element ได้ Selenium พิมพ์เส้นทางไฟล์ลงในกล่องโต้ตอบของระบบปฏิบัติการ แล้วกด Enter

บันทึกสคริปต์ด้านล่างนี้เป็น อัปโหลด.au3รวบรวมเป็น upload.exeจากนั้นเรียกใช้จาก Java หลังจากคลิกปุ่ม Browse แล้ว

upload.au3 – รอหน้าต่างเปิดไฟล์และพิมพ์เส้นทางไฟล์
วินรอแอคทีฟ("เปิด")
ส่ง(“C:\newhtml.html”)
ส่ง("{เข้า}")

ราคาเริ่มต้น Javaเรียกใช้งานตัวช่วยหลังจากคลิกปุ่ม Browse:

ไดรเวอร์.ค้นหาองค์ประกอบ(โดย id(ปุ่มเรียกดู)).คลิก();
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 ที่คุณสร้างไว้ในขั้นตอนข้างต้น

การตั้งค่า Wget

ขั้นตอน 2) เปิด Run โดยการกด Windows กดปุ่ม “R” ค้างไว้ แล้วพิมพ์ “cmd” จากนั้นคลิกตกลง

การตั้งค่า Wget

พิมพ์คำสั่ง “cd /” เพื่อย้ายไปยังไดเร็กทอรีราก

การตั้งค่า Wget

ขั้นตอน 3) พิมพ์คำสั่งเพื่อตรวจสอบว่าการตั้งค่าที่ให้มานั้นใช้งานได้หรือไม่

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

การตั้งค่า Wget

ดูเหมือนว่าจะมีปัญหาในการเขียนลงในไดรฟ์ C

ขั้นตอน 4) คุณต้องแก้ไขข้อผิดพลาดของ wget ในบรรทัดคำสั่งก่อนที่จะเรียกใช้โค้ด Selenium WebDriver ข้อผิดพลาดเหล่านี้จะยังคงอยู่ต่อไป Eclipse และข้อความแสดงข้อผิดพลาดจะไม่ให้ข้อมูลมากนัก ทางที่ดีที่สุดคือลองใช้งาน wget บนบรรทัดคำสั่งดูก่อน หากใช้งานได้บนบรรทัดคำสั่ง ก็จะใช้งานได้ใน wget อย่างแน่นอน Eclipse.

ในตัวอย่างของเรา ดังที่แสดงในขั้นตอนที่ 3 มีปัญหาในการเขียนข้อมูลลงในไดรฟ์ C ลองเปลี่ยนตำแหน่งการดาวน์โหลดไปที่ไดรฟ์ D แล้วตรวจสอบผลลัพธ์ดู

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

การตั้งค่า Wget

Messenger ดาวน์โหลดสำเร็จแล้ว

ก่อนดำเนินการต่อ อย่าลืมลบไฟล์ที่ดาวน์โหลดมาก่อน

ใช้ WebDriver และ Wget

ในตัวอย่างต่อไปนี้ เราจะใช้ WebDriver และ wget เพื่อดาวน์โหลดซอฟต์แวร์แชทยอดนิยมที่เรียกว่า Yahoo Messengerฐานของเรา URL จะเป็น https://demo.guru99.com/test/yahoo.html.

ใช้ WebDriver และ Wget

ขั้นตอน 1) นำเข้าแพ็กเกจ “java.io.IOException” เนื่องจากเราจะต้องจับ IOException ในภายหลังในขั้นตอนที่ 4

ใช้ WebDriver และ Wget

ขั้นตอน 2) ใช้เมธอด getAttribute() เพื่อดึงค่า “href” ของลิงก์ดาวน์โหลดและบันทึกไว้ในตัวแปรประเภท String ในกรณีนี้ เราตั้งชื่อตัวแปรว่า “sourceLocation”

ใช้ WebDriver และ Wget

ขั้นตอน 3) ตั้งค่าไวยากรณ์สำหรับ wget โดยใช้คำสั่งต่อไปนี้

ใช้ WebDriver และ Wget

ขั้นตอน 4) เริ่มต้นกระบวนการดาวน์โหลดโดยการเรียก wget จากโค้ด WebDriver ของเรา

ใช้ WebDriver และ Wget

โดยสรุป โค้ด 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 ดาวน์โหลดตัวติดตั้งสำเร็จแล้วที่นั่น

ใช้ WebDriver และ Wget

การตั้งค่าเส้นทางการดาวน์โหลดแบบกำหนดเองด้วย Selenium 4 ซีดีพี

Selenium 4. เปิดเผย Chrome DevTools Protocol ซึ่งช่วยให้คุณควบคุมพฤติกรรมการดาวน์โหลดของเบราว์เซอร์ได้โดยไม่ต้องใช้เครื่องมือของบุคคลที่สาม โค้ดตัวอย่างด้านล่างกำหนดให้การดาวน์โหลดทั้งหมดไปยังโฟลเดอร์ที่กำหนดเองและข้ามการแจ้งเตือน "บันทึกเป็น" ดังนั้นไฟล์จึงไปอยู่ในตำแหน่งที่การทดสอบคาดหวัง

ไดรเวอร์ Chrome คนขับ = ใหม่ ไดร์เวอร์ Chrome();
แผนที่แสดงที่ตั้งบริษัท<เชือก,วัตถุ> พารามิเตอร์ = ใหม่ แฮชแมป<>();
พารามิเตอร์.ใส่("พฤติกรรม", "อนุญาต");
พารามิเตอร์.ใส่(“เส้นทางการดาวน์โหลด”, “D:\\selenium-downloads”);
ไดรเวอร์.executeCdpCommand(“Page.setDownloadBehavior”พารามิเตอร์);
ไดรเวอร์.รับ(“https://demo.guru99.com/test/yahoo.html”);
ไดรเวอร์.ค้นหาองค์ประกอบ(โดย id(“ดาวน์โหลดแอปพลิเคชันส่งข้อความ”)).คลิก();

คุณสามารถตรวจสอบการดาวน์โหลดได้โดยการตรวจสอบชื่อไฟล์ที่คาดหวังในไดเร็กทอรีเป้าหมายและตรวจสอบขนาดของไฟล์ ซึ่งทำให้การทดสอบเป็นไปอย่างแน่นอนโดยไม่ต้องใช้สคริปต์ภายนอก

คำถามที่พบบ่อย

Selenium เรียกใช้ sendKeys() บน องค์ประกอบที่มีเส้นทางไฟล์แบบสัมบูรณ์ เบราว์เซอร์จะกรอกข้อมูลในช่องนั้นโดยตรง ดังนั้นจึงไม่จำเป็นต้องเปิดตัวเลือกไฟล์ของระบบปฏิบัติการ และไม่ต้องคลิกปุ่ม Browse ด้วย

เมื่อหน้าเว็บไม่มีช่องสำหรับป้อนไฟล์ ให้ใช้ AutoIt กับ Windows หรือคลาส java.awt.Robot เครื่องมือเหล่านี้จะพิมพ์พาธลงในกล่องโต้ตอบของระบบปฏิบัติการที่ใช้งานอยู่ แล้วกด Enter หลังจากคลิกปุ่ม Browse แล้ว

เรียกใช้ executeCdpCommand(“Page.setDownloadBehavior”, params) โดยตั้งค่าพฤติกรรมเป็น allow และตั้งค่า downloadPath เป็นโฟลเดอร์ของคุณ Selenium ขั้นตอนที่ 4 จะส่งคำสั่งไปยัง Chrome DevTools และจะข้ามขั้นตอนการบันทึกเป็น (Save As)

ใช่แล้ว ผู้ช่วย AI จะอ่านแบบฟอร์มการอัปโหลดของคุณ แนะนำตัวเลือก สร้างไฟล์ขอบเขต เช่น ไฟล์ตัวอย่างที่ว่างเปล่า มีขนาดใหญ่เกินไป หรือมีนามสกุลไม่ถูกต้อง และเขียนบล็อก sendKeys() ให้ ซึ่งจะช่วยลดเวลาในการตั้งค่าและค้นพบกรณีพิเศษที่ผู้ทดสอบที่เป็นมนุษย์มักมองข้ามไป

เครื่องมือ AI ตรวจสอบโฟลเดอร์เป้าหมาย เปรียบเทียบขนาดไฟล์และค่าตรวจสอบความถูกต้องกับค่าที่คาดไว้ และแจ้งเตือนหากพบความไม่ตรงกัน โมเดลการมองเห็นยังสามารถเปิดไฟล์ PDF หรือรูปภาพ และยืนยันว่าเนื้อหาตรงกับป้ายกำกับลิงก์ ซึ่งช่วยลดการตรวจสอบด้วยตนเองจากการทดสอบการถดถอย

Wget ข้ามขั้นตอนการใช้งานเบราว์เซอร์ไปโดยสิ้นเชิง และบันทึกไฟล์ลงดิสก์โดยตรงผ่านกระบวนการบรรทัดคำสั่ง มีประโยชน์สำหรับระบบคอมพิวเตอร์รุ่นเก่า Selenium มี 2 ​​หรือ 3 การตั้งค่าที่ไม่มีตัวเลือกการดาวน์โหลด CDP และ ChromeOptions ให้ใช้งาน

สรุปโพสต์นี้ด้วย: