![ff-00]()
![ff-00]()
วันนี้ทำการ update Firefox หลังจากที่ไม่ได้ update มานาน ๆ ๆ ๆ มาก
ทำให้พบกับปัญหาการทดสอบระบบ web บน Firefox 48 ด้วย Robot Framework
อาการที่พบเจอเป็นดังนี้
เปิด Firefox ขึ้นมาได้ แต่ไม่เข้าไปยัง url ที่ต้องการ
บางครั้ง Firefox ก็ปิดตัวเองไปเลย
งานเข้าสิครับ จะแก้ไขกันอย่างไรดีล่ะ ?
แสดงผลการทำงานดังรูป
Error message เป็นดังนี้
[code]
[ WARN ] Keyword 'Capture Page Screenshot' could not be run on failure: No browser is open
WebDriverException: Message: Can't load the profile.
Profile Dir: /var/folders/t5/8kg23s_97z9dw44tfc1d6dqw0000gn/T/tmp4y9Zfw/webdriver-py-profilecopy
If you specified a log_file in the FirefoxBinary constructor, check it for details.
[/code]
เริ่มจาก version ของ library ที่ใช้งานกันก่อน
- Python 2.7
- Robot Framework 3.0
- Selenium2Library 1.8.0
- Selenium 2.53.6
มาค้นหาต้นเหตุของปัญหากันหน่อย
ข้อมูลจาก Firefox developer อธิบายว่า
ตั้งแต่ Firefox 47 เป็นต้นมานั้น ได้เปลี่ยน Firefox WebDriver ใหม่ชื่อว่า Marionette
มีผลทำให้ Firefox WebDriver เดิมใน Selinium 2 ใช้งานไม่ได้นั่นเอง
มาแก้ไขปัญหากันดีกว่า
วิธีการนี้สำหรับคนหัวแข็ง ไม่ยอมทำการ update อะไรเลย
ดังนั้นการแก้ไขจึงต้องทำเยอะหน่อยนะ !!
มีขั้นตอนดังนี้
1. ทำการ Download Geckodriver version 0.8.0 มาใช้งาน
โดยทำการ download และ extract
จากนั้นนำไปใส่ไว้ใน PATH ของระบบ
2. ทำการ run ชุดการทดสอบจะเจอ error ดังนี้
[code]
WebDriverException: Message: 'wires' executable needs to be in PATH.
[/code]
ให้เปลี่ยนชื่อไฟล์จาก geckodriver เป็น wires ซะ !!
3. ยังไม่พอนะ ต้องแก้ไขใน script ของ Robot Framework ก่อนเปิด Browser เพื่อทดสอบดังนี้
[code]
${ff default caps} Evaluate sys.modules['selenium.webdriver'].common.desired_capabilities.DesiredCapabilities.FIREFOX sys,selenium.webdriver
Set To Dictionary ${ff default caps} marionette=${True}
Set To Dictionary ${ff default caps} binary=/Applications/Firefox.app/Contents/MacOS/firefox
[/code]
คำอธิบาย
- ทำการกำหนด marionette ให้เป็น True คือเปิดการใช้งาน
- binary คือ Path ของ Firefox นั่นเอง
เพียงเท่านี้ก็สามารถทดสอบได้แล้ววววว !!!
ชีวิตดูลำบากมาก ๆ ว่าไหม ?
ถ้าไม่อยากแก้ไขปัญหาตามข้างต้น สามารถแก้ไขได้อีก 2 วิธีคือ
วิธีที่ 1 ใช้ Firefox ที่ต่ำกว่า version 47 สบาย ๆ
วิธีที่ 2 ใช้งาน Selenium 3 beta ซะ
เนื่องจากทำการปรับปรุงครั้งใหญ่ ตัวอย่างเช่น
ดังนั้น update เถอะนะ
[code]
$pip install -U selenium==3.0.0b2
[/code]
แต่เมื่อ run การทดสอบจะเกิด error ดังนี้
[code]
WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
[/code]
ดังนั้นนั้นให้ทำการ
Download Geckodriver version 0.10.0 มาใช้งาน
โดยทำการ download และ extract
จากนั้นนำไปใส่ไว้ใน PATH ของระบบ
เพียงเท่านี้ก็สามารถทดสอบระบบ web บน Firefox 48 ได้แล้ว
ส่วนผมเลือกวิธีใช้งาน Selenium 3 beta นะครับ