Selenium Firefox โปรไฟล์: คู่มือการตั้งค่า
⚡ สรุปอย่างชาญฉลาด
Firefox โปรไฟล์จะจัดเก็บบุ๊กมาร์ก รหัสผ่าน ส่วนเสริม และการตั้งค่าต่างๆ ที่เป็นของผู้ใช้เบราว์เซอร์รายหนึ่ง และ Selenium WebDriver สามารถโหลดโปรไฟล์เฉพาะได้ ดังนั้นการทำงานอัตโนมัติทุกครั้งจึงเริ่มต้นจากสถานะเบราว์เซอร์ที่เหมือนกันและคาดเดาได้
Selenium Firefox บริษัท
Firefox โปรไฟล์คือชุดของการตั้งค่า การปรับแต่ง ส่วนเสริม และการตั้งค่าส่วนบุคคลอื่น ๆ ที่สามารถทำได้บน Firefox Browser- คุณสามารถปรับแต่งได้ Firefox โปรไฟล์ให้เหมาะกับคุณ Selenium ข้อกำหนดระบบอัตโนมัติ
นอกจากนี้ Firefox หรือเบราว์เซอร์อื่นใดที่จัดการการตั้งค่าใบรับรอง SSL ดังนั้นการทำให้เป็นอัตโนมัติจึงสมเหตุสมผลมากควบคู่ไปกับโค้ดทดสอบ
โดยสรุป โปรไฟล์คือการตั้งค่าส่วนบุคคลของผู้ใช้ เมื่อคุณต้องการใช้งานระบบอย่างน่าเชื่อถือ อัตโนมัติ เมื่อ Firefox สำหรับเบราว์เซอร์ของคุณ แนะนำให้สร้างโปรไฟล์แยกต่างหาก โปรไฟล์เฉพาะจะช่วยปกปิดข้อมูลการท่องเว็บประจำวันของคุณจากการทดสอบ ซึ่งเป็นสิ่งแรกที่ควรตัดออกเมื่อทำการทดสอบ Selenium สคริปต์ทำงานแตกต่างกันบนเครื่องสองเครื่อง
ตำแหน่งของโฟลเดอร์โปรไฟล์ของคุณในดิสก์
Firefox โปรไฟล์ก็เหมือนกับที่ผู้ใช้คนอื่นใช้ Firefox. Firefox บันทึกข้อมูลส่วนบุคคล เช่น บุ๊กมาร์ก รหัสผ่าน และการตั้งค่าของผู้ใช้ ซึ่งสามารถแก้ไข ลบ หรือสร้างใหม่ได้โดยใช้ตัวจัดการโปรไฟล์
ภาพหน้าจอด้านล่างแสดงโฟลเดอร์โปรไฟล์ที่ปรากฏบนดิสก์ โดยตั้งชื่อตามโปรไฟล์และมีคำนำหน้าแบบสุ่ม
ตำแหน่งของโปรไฟล์มีดังนี้
- ใช้เพื่อการ Windows > C:\Users\ \AppData\Roaming\Mozilla\Firefoxโปรไฟล์\ชื่อโปรไฟล์.ค่าเริ่มต้น
- ใช้เพื่อการ ลินุกซ์ > ~/.mozilla/firefox/profile_name.default/
- สำหรับ Mac OS X > ~/Library/Application Support/Firefox/โปรไฟล์/profile_name.default/
เพื่อที่จะดำเนินการได้สำเร็จ Selenium ทดสอบก Firefox โปรไฟล์ควรเป็น –
- โหลดง่าย
- การตั้งค่าพร็อกซีหากจำเป็น
- การตั้งค่าเฉพาะผู้ใช้อื่นๆ ตามความต้องการของระบบอัตโนมัติ
วิธีการตั้งค่า Firefox โปรไฟล์สำหรับ Selenium การทดสอบ
เรามาดูกันทีละขั้นตอนว่าจะสร้างได้อย่างไร Firefox โปรไฟล์
ขั้นตอน 1) ปิด Firefox เบราว์เซอร์
ขั้นตอนแรก ให้ปิด Firefox หากเปิดอยู่แล้ว โปรแกรมจัดการโปรไฟล์จะไม่เริ่มทำงานในขณะที่... Firefox วินโดวน่ากำลังทำงานอยู่
ขั้นตอน 2) เปิดรัน (Windows กดแป้น + R) แล้วพิมพ์ firefox.exe –p
หน้าต่าง Run ควรมีลักษณะเหมือนภาพหน้าจอด้านล่างก่อนที่คุณจะกด OK
หมายเหตุ: หากเปิดไม่ได้ คุณสามารถลองใช้พาธแบบเต็มที่ล้อมด้วยเครื่องหมายอัญประกาศได้
- บนระบบ 32 บิต Windows: “C:\Program Files\Mozilla Firefox\firefox.exe” –p
- บนระบบ 64 บิต Windows (32 บิต Firefox): “C:\Program Files (x86)\Mozilla Firefox\firefox.exe” –p
ขั้นตอน 3) เลือกโปรไฟล์ผู้ใช้
ตอนนี้ กล่องโต้ตอบชื่อ... Firefox จะเปิดออกดังที่แสดงด้านล่าง
ขั้นตอน 4) สร้างโปรไฟล์
เลือกตัวเลือก "สร้างโปรไฟล์" ที่แสดงในภาพหน้าจอถัดไปเพื่อเริ่มขั้นตอนการสร้างโปรไฟล์
ตอนนี้ เลือกตัวเลือก สร้างโปรไฟล์ จากหน้าต่าง จากนั้นตัวช่วยสร้างจะเปิดขึ้น คลิกที่ถัดไป
ขั้นตอน 5) ตั้งชื่อโปรไฟล์ของคุณ
พิมพ์ชื่อสำหรับโปรไฟล์การทำงานอัตโนมัติในช่องที่ไฮไลต์ด้านล่าง แล้วทำตามขั้นตอนในตัวช่วยสร้างให้เสร็จสิ้น
ตอนนี้โปรไฟล์ของคุณพร้อมแล้ว คุณสามารถเลือกโปรไฟล์ของคุณและเปิดได้ Firefoxจากตรงนี้ โปรไฟล์จะทำงานเหมือนกับเซสชันเบราว์เซอร์อื่นๆ ดังนั้น สคริปต์ WebDriver ตัวแรก จะดำเนินการต่อต้านโดยไม่เปลี่ยนแปลง
คุณจะสังเกตได้ว่าใหม่ Firefox หน้าต่างจะไม่แสดงไอคอนบุ๊กมาร์กและรายการโปรดของคุณ
หมายเหตุ: โปรไฟล์ที่เลือกครั้งล่าสุดจะถูกโหลดโดยอัตโนมัติในครั้งถัดไป Firefox ปล่อย. คุณจะต้องรีสตาร์ทตัวจัดการโปรไฟล์หากคุณต้องการเปลี่ยนโปรไฟล์
สคริปต์อัตโนมัติสำหรับ Selenium
เมื่อสร้างโปรไฟล์เสร็จแล้ว ขั้นตอนต่อไปคือการโหลดโปรไฟล์จากโค้ด เพื่อเข้าถึงโปรไฟล์ที่สร้างขึ้นใหม่ Firefox โปรไฟล์ใน Selenium ในการทดสอบซอฟต์แวร์ WebDriver เราจำเป็นต้องใช้คลาส ProfilesIni ที่มีอยู่ใน WebDriver และเมธอด getProfile ดังแสดงด้านล่าง
⚠️ หมายเหตุเกี่ยวกับเวอร์ชัน: ข้อความที่ตัดตอนมาในส่วนนี้เป็นข้อความต้นฉบับ Selenium แบบฟอร์ม 2 ในปัจจุบัน Selenium ปล่อยคลาสที่อาศัยอยู่ org.openqa.selenium.firefox.ProfilesIni - The .ภายใน แพ็กเกจย่อยถูกยกเลิก และข้อมูลโปรไฟล์จะถูกส่งต่อให้คนขับผ่านทาง Firefoxตัวเลือกต่างๆ โปรดดูที่ Firefoxดูรายละเอียดตัวเลือกด้านล่างสำหรับเวอร์ชันที่ทันสมัยกว่า
Selenium รหัสสำหรับโปรไฟล์
นี่คือโค้ดสำหรับสร้างโปรไฟล์ ซึ่งสามารถฝังลงในไฟล์ได้ Selenium รหัส.
ProfilesIni profile = new ProfilesIni();
// สิ่งนี้จะสร้างวัตถุสำหรับ Firefox โปรไฟล์
FirefoxProfile myprofile = profile.getProfile("xyzProfile");
// สิ่งนี้จะเริ่มต้น Firefox คนขับรถ
WebDriver driver = new FirefoxDriver(myprofile)
มาดูการนำโค้ดนี้ไปใช้ในตัวอย่างต่อไปนี้กัน
Firefox ตัวอย่างโปรไฟล์ 1
ตัวอย่างแรกจะโหลดโปรไฟล์โดยใช้ชื่อ ภาพหน้าจอด้านล่างแสดงสคริปต์เดียวกันภายในตัวแก้ไข
// import the package import java.io.File; import java.util.concurrent.TimeUnit; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxProfile; import org.openqa.selenium.firefox.internal.ProfilesIni; public class FirefoxProfile { public static void main(String[] args) { ProfilesIni profile = new ProfilesIni(); FirefoxProfile myprofile = profile.getProfile("xyzProfile"); // Initialize Firefox driver WebDriver driver = new FirefoxDriver(myprofile); //Maximize browser window driver.manage().window().maximize(); //Go to URL which you want to navigate driver.get("http://www.google.com"); //Set timeout for 5 seconds so that the page may load properly within that time driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); //close firefox browser driver.close(); } }
คำอธิบายสำหรับรหัส
ด้านล่างนี้เป็นคำอธิบายของโค้ดทีละบรรทัด
- Code บรรทัดที่ 2-7: ก่อนอื่นเราต้องนำเข้าแพ็กเกจที่จำเป็นสำหรับการรันโปรแกรม Selenium รหัส.
- Code บรรทัดที่ 8: สร้างคลาสสาธารณะ “Firefoxประวัติโดยย่อ."
- Code บรรทัดที่ 9: สร้างอ็อบเจ็กต์ (คุณจำเป็นต้องมีความรู้พื้นฐานเกี่ยวกับแนวคิด OOP)
- Code บรรทัดที่ 10-11: เราจำเป็นต้องเริ่มต้นใช้งาน Firefox โปรไฟล์ที่มีวัตถุเป็น myprofile
- Code บรรทัดที่ 13: สร้างวัตถุสำหรับ Firefox.
- Code บรรทัดที่ 15: ขยายหน้าต่างให้เต็มจอ
- Code บรรทัดที่ 17: driver.get ใช้เพื่อนำทางไปยังตำแหน่งที่กำหนด URL.
- Code บรรทัดที่ 19: คำสั่ง `set timeout` ใช้สำหรับรอเวลาสักระยะเพื่อให้เบราว์เซอร์โหลดหน้าเว็บเสร็จก่อนที่จะไปยังหน้าถัดไป
- Code บรรทัดที่ 21: ปิด Firefox.
เรามาดูตัวอย่างอีกสักตัวอย่างกันครับ
Firefox ตัวอย่างโปรไฟล์ 2
ตัวอย่างที่สองข้ามไฟล์ profiles.ini และชี้ไปยังโฟลเดอร์โปรไฟล์โดยตรง ดังที่แสดงในภาพหน้าจอของโปรแกรมแก้ไข
import java.io.File; import java.util.concurrent.TimeUnit; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxProfile; import org.openqa.selenium.firefox.internal.ProfilesIni; public class FirefoxProfile2{ public static void main(String[] args) { // Create object for FirefoxProfile FirefoxProfilemyprofile=newFirefoxProfile (newFile("\c:users\AppData\MozillaFirefoxProfile_name.default ")); // Initialize Firefox driver WebDriver driver = new FirefoxDriver(myprofile); //Maximize browser window driver.manage().window().maximize(); //Go to URL driver.get("http://www.google.com"); //Set timeout driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); //close firefox browser driver.close(); }
คำอธิบายสำหรับรหัส
ด้านล่างนี้เป็นคำอธิบายของโค้ดทีละบรรทัด
- Code บรรทัดที่ 1-6: ก่อนอื่นเราต้องนำเข้าแพ็กเกจที่จำเป็นสำหรับการรันโปรแกรม Selenium รหัส.
- Code บรรทัดที่ 8: สร้างคลาสสาธารณะ Firefoxโปรไฟล์ 2.
- Code บรรทัดที่ 12: สร้างอ็อบเจ็กต์ myprofile โดยอ้างอิงถึงพาธที่แน่นอน
- Code บรรทัดที่ 14: สร้างวัตถุสำหรับ Firefox.
- Code บรรทัดที่ 16: ขยายหน้าต่างให้เต็มจอ
- Code บรรทัดที่ 18: driver.get ใช้เพื่อนำทางไปยังตำแหน่งที่กำหนด URL.
- Code บรรทัดที่ 20: คำสั่ง `set timeout` ใช้สำหรับรอเวลาสักระยะเพื่อให้เบราว์เซอร์โหลดหน้าเว็บเสร็จก่อนที่จะไปยังหน้าถัดไป
- Code บรรทัดที่ 22: ปิด Firefox.
โปรดทราบว่าเส้นทางในตัวอย่างโค้ดนี้เขียนตรงตามที่ปรากฏในบทเรียนต้นฉบับทุกประการ บนเครื่องจริงจะต้องใช้เครื่องหมายแบ็กสแลชเพื่อหลีกเลี่ยงการตีความผิด เช่น “C:\\Users\\guru99\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\xyzProfile.default”.
วิธีใช้ a Firefox โปรไฟล์ใน Selenium 4 ด้วย Firefoxตัวเลือก
ตัวอย่างทั้งสองข้างต้นคอมไพล์ได้เฉพาะกับเท่านั้น Selenium 2. มีสองสิ่งที่เปลี่ยนแปลงไปหลังจากนั้น และบทช่วยสอนปัจจุบันทั้งหมดใช้รูปแบบใหม่กว่า
- ProfilesIni ย้ายออกไปแล้ว ภายใน เนื่องจากเป็นแพ็กเกจย่อย การนำเข้าจึงเป็น org.openqa.selenium.firefox.ProfilesIni
- การขอ Firefoxคนขับ(Firefoxตัวสร้างโปรไฟล์ถูกลบออกแล้ว โปรไฟล์ถูกแนบไว้กับ Firefoxอ็อบเจ็กต์ตัวเลือกจะถูกส่งไปยังไดรเวอร์
- Selenium 4 การหมดเวลาจะใช้ java.time.Duration แทนที่จะเป็นค่าบวก TimeUnit ดังนั้น implicitlyWait(5, TimeUnit.SECONDS) จึงกลายเป็น implicitlyWait(Duration.ofSeconds(5))
ตารางด้านล่างนี้แสดงการจับคู่ระหว่างฟังก์ชันเดิมกับฟังก์ชันทดแทน
| การเรียกใช้แบบดั้งเดิม (Selenium 2) | สายเรียกเข้าปัจจุบัน (Selenium 3 และ 4) |
|---|---|
| import org.openqa.selenium.firefox.internal.ProfilesIni; | import org.openqa.selenium.firefox.ProfilesIni; |
| ใหม่ Firefoxคนขับ (โปรไฟล์ของฉัน) | ตัวเลือก.ตั้งค่าโปรไฟล์(โปรไฟล์ของฉัน); ใหม่ Firefoxไดร์เวอร์ (ตัวเลือก) |
| implicitlyWait(5, TimeUnit.SECONDS) | implicitlyWait(Duration.ofSeconds(5)) |
| System.setProperty สำหรับ geckodriver | แก้ไขโดยอัตโนมัติโดย Selenium ผู้จัดการ |
ตัวอย่างที่ 1 ซึ่งเขียนใหม่โดยใช้เวอร์ชันล่าสุด จะมีลักษณะดังนี้
import java.time.Duration; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxOptions; import org.openqa.selenium.firefox.FirefoxProfile; import org.openqa.selenium.firefox.ProfilesIni; public class FirefoxProfileSelenium4 { public static void main(String[] args) { ProfilesIni allProfiles = new ProfilesIni(); FirefoxProfile myprofile = allProfiles.getProfile("xyzProfile"); FirefoxOptions options = new FirefoxOptions(); options.setProfile(myprofile); WebDriver driver = new FirefoxDriver(options); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5)); driver.get("https://www.google.com"); driver.quit(); } }
การค้นหาโปรไฟล์ยังคงเหมือนเดิม: ProfilesIni ยังคงอ่านไฟล์ profiles.ini จาก Firefox โฟลเดอร์ application-data และ getProfile ยังคงส่งค่า null กลับมาเมื่อชื่อไม่ตรงกับโปรไฟล์ ดังนั้นควรเพิ่มการตรวจสอบค่า null ก่อนที่ไดรเวอร์จะเริ่มทำงาน อ็อบเจ็กต์ตัวเลือกเดียวกันนี้ยังบรรจุอาร์กิวเมนต์ที่ใช้ในที่อื่น ๆ เช่น อาร์กิวเมนต์สำหรับ การขยายหรือปรับขนาดหน้าต่างเบราว์เซอร์.
วิธีการตั้งค่า Firefox การตั้งค่าโปรไฟล์ใน Selenium
การบันทึกโปรไฟล์เป็นเพียงครึ่งหนึ่งของเรื่องราวทั้งหมด การทำงานอัตโนมัติส่วนใหญ่ต้องการการตั้งค่าจำนวนหนึ่งที่เขียนด้วยโค้ด เพื่อให้การทำงานเหมือนกันในทุกเครื่อง เมธอด setPreference จะเขียนค่าเหล่านั้นลงในสำเนาโปรไฟล์ก่อน Firefox การเปิดตัว
FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("browser.download.folderList", 2); profile.setPreference("browser.download.dir", "C:\\selenium-downloads"); profile.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/pdf"); profile.setPreference("dom.webnotifications.enabled", false); profile.setPreference("intl.accept_languages", "es"); FirefoxOptions options = new FirefoxOptions(); options.setProfile(profile); WebDriver driver = new FirefoxDriver(options);
การตั้งค่าด้านล่างนี้ครอบคลุมกรณีที่พบได้บ่อยที่สุดในการเขียนสคริปต์ในชีวิตประจำวัน
| การตั้งค่า | สิ่งที่มันควบคุม |
|---|---|
| รายชื่อโฟลเดอร์ดาวน์โหลดของเบราว์เซอร์ | ตั้งค่าเป็น 2 เพื่อใช้โฟลเดอร์ดาวน์โหลดที่กำหนดเองแทนโฟลเดอร์เริ่มต้นของระบบ |
| เบราว์เซอร์ดาวน์โหลดไดเร็กต์ | เส้นทางสัมบูรณ์ Firefox บันทึกไฟล์ดาวน์โหลดลงใน... |
| browser.helperApps.neverAsk.saveToDisk | ประเภท MIME ที่บันทึกโดยไม่ต้องแสดงกล่องโต้ตอบการดาวน์โหลด |
| dom.webnotifications.เปิดใช้งานแล้ว | ตั้งค่าเป็น false เพื่อปิดการแจ้งเตือนแบบ Web Push |
| ยอมรับภาษาต่างประเทศ | ส่วนหัว Accept-Language มีประโยชน์สำหรับการดำเนินการแปลภาษา |
| ทั่วไป.useragent.override | แทนที่สตริง User Agent ที่ส่งมาจากเบราว์เซอร์ |
มีข้อจำกัดสองประการที่ควรทราบ ประการแรก ต้องตั้งค่ากำหนดต่างๆ ก่อนสร้างไดรเวอร์ เนื่องจาก WebDriver จะคัดลอกโปรไฟล์เมื่อเริ่มต้นทำงาน และการเปลี่ยนแปลงในภายหลังจะถูกละเลย ประการที่สอง WebDriver ยังสงวนค่ากำหนดจำนวนเล็กน้อยที่จำเป็นสำหรับการสื่อสารกับเบราว์เซอร์ และจะเขียนทับค่าเหล่านั้นไม่ว่าคุณจะกำหนดอะไรก็ตาม เนื่องจากค่าเหล่านั้นอยู่ในโปรไฟล์แทนที่จะอยู่ในสคริปต์ ค่าเหล่านั้นจึงถูกส่งต่อไปยังเบราว์เซอร์ด้วย การทดสอบข้ามเบราว์เซอร์ รันโดยไม่ต้องแก้ไขโค้ดทดสอบใดๆ
ร่วมกัน Firefox ข้อผิดพลาดของโปรไฟล์ใน Selenium และจะแก้ไขอย่างไร
ปัญหาเกี่ยวกับโปรไฟล์มักปรากฏในรูปแบบของข้อผิดพลาดในการคอมไพล์ หรือเบราว์เซอร์ที่เปิดขึ้นมาด้วยการตั้งค่าที่ไม่ถูกต้อง ตารางนี้แสดงรายการความล้มเหลวที่รายงานบ่อยที่สุด พร้อมทั้งสาเหตุของแต่ละข้อผิดพลาด
| อาการ | ก่อให้เกิด | แก้ไขปัญหา |
|---|---|---|
| ผู้สร้าง Firefoxคนขับ(Firefoxโปรไฟล์) ไม่ได้ถูกกำหนด | ตัวสร้างถูกลบออกหลังจากนั้น Selenium 2. | ห่อโปรไฟล์ไว้ใน Firefoxตัวเลือกและส่งออบเจ็กต์ตัวเลือกแทน |
| ไม่สามารถแก้ไขการนำเข้า org.openqa.selenium.firefox.internal.ProfilesIni ได้ | คลาสได้ย้ายออกจากแพ็กเกจย่อยภายในแล้ว | นำเข้า org.openqa.selenium.firefox.ProfilesIni |
| NullPointerException บน getProfile | ชื่อโปรไฟล์ไม่ตรงกับข้อมูลใดๆ ในไฟล์ profiles.ini | เปิดตัวจัดการโปรไฟล์อีกครั้ง แล้วคัดลอกชื่อให้ถูกต้องทุกตัวอักษร รวมถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็กด้วย |
| ของคุณ Firefox ไม่สามารถโหลดโปรไฟล์ได้ อาจเป็นเพราะโปรไฟล์หายไปหรือไม่สามารถเข้าถึงได้ | อื่น Firefox อินสแตนซ์นั้นมีโปรไฟล์อยู่แล้ว หรือไม่ก็เส้นทางโฟลเดอร์ไม่ถูกต้อง | ปิดทุกอย่าง Firefox จากนั้นตรวจสอบเส้นทางกับตำแหน่งที่ระบุไว้ข้างต้น |
| ความชอบไม่มีผลใดๆ | ค่านี้ถูกตั้งค่าหลังจากไดรเวอร์เริ่มทำงาน หรือ WebDriver จองค่านี้ไว้ | ย้ายคำสั่ง setPreference ทั้งหมดขึ้นไปไว้เหนือคำสั่งอื่น Firefoxตัวสร้างไดรเวอร์ |
หากเบราว์เซอร์เริ่มต้นทำงานได้ถูกต้อง แต่สคริปต์ยังคงล้มเหลวในภายหลัง โปรไฟล์อาจไม่ใช่สาเหตุ ลองตรวจสอบดู การจัดการข้อยกเว้นใน Selenium โดยปกติแล้วจะเป็นเส้นทางที่เร็วกว่าจากจุดนั้น







