Selenium 2.53 ไม่ทำงานบน Firefox 47


107

ฉันได้รับข้อผิดพลาดขณะใช้ Firefox กับ WebDriver

org.openqa.selenium.firefox.NotConnectedException: Unable to connect
to host 127.0.0.1 on port 7055 after 45000 ms.
  • เวอร์ชัน Firefox: 47.0.0
  • ซีลีเนียม: 2.53.0
  • Windows 10 64 บิต

มีใครได้รับปัญหาที่คล้ายกันหรือมีความคิดว่าวิธีแก้ปัญหานี้คืออะไร? ทำงานได้ดีกับ Chrome แต่เมื่อใช้ Firefox จะไม่มีการโหลด URL


1
ใช่ฉันได้รับข้อผิดพลาดเดียวกัน ฉันกำลังถอนการติดตั้งและติดตั้งใหม่อีกครั้ง หากเบราว์เซอร์ของคุณเปิดอยู่ให้รีเซ็ตและลอง
Kishan Patel

สวัสดี Kishan ฉันลองทำตามที่คุณพูดถึง แต่ก็ยังมีข้อผิดพลาดเหมือนเดิม ... ดังนั้นฉันจึงลดระดับเป็น 46.0.1
veena k

ใช่. มีปัญหาจุกปิดการแสดงจาก Mozilla พวกเขาอัปเดตเวอร์ชัน คุณสามารถย้อนกลับไปที่ 47 ได้อีกครั้ง :-)
Kishan Patel


1
ปัญหานี้ปรากฏบน OSX โดยมีข้อผิดพลาด "" Firefox.bin "ไม่สามารถเปิดได้เนื่องจากไม่สามารถยืนยันตัวตนของผู้พัฒนาได้:" การดาวน์เกรดเป็น 46 แก้ไขได้
hoosteeno

คำตอบ:


93

น่าเสียดายที่ Selenium WebDriver 2.53.0 เข้ากันไม่ได้กับ Firefox 47.0 ส่วนประกอบ WebDriver ซึ่งจัดการกับเบราว์เซอร์ Firefox ( FirefoxDriver) จะถูกยกเลิก สำหรับเวอร์ชัน 3.0 Selenium WebDriver จะต้องใช้geckodriverไบนารีเพื่อจัดการเบราว์เซอร์ Firefox ข้อมูลเพิ่มเติมที่นี่และที่นี่

ดังนั้นในการใช้ Firefox 47.0 เป็นเบราว์เซอร์ที่มี Selenium WebDriver 2.53.0 คุณต้องดาวน์โหลดไดรเวอร์ Firefox (ซึ่งเป็นไฟล์ไบนารีที่เรียกว่าgeckodriverรุ่น 0.8.0 และก่อนหน้านี้wires) และส่งออกพา ธ สัมบูรณ์ไปยังตัวแปรwebdriver.gecko.driverเป็น คุณสมบัติระบบในโค้ด Java ของคุณ:

System.setProperty("webdriver.gecko.driver", "/path/to/geckodriver");

โชคดีที่ไลบรารีWebDriverManagerสามารถทำงานนี้ให้คุณได้เช่นดาวน์โหลด Marionette binary ที่เหมาะสมสำหรับเครื่องของคุณ (Linux, Mac หรือ Windows) และส่งออกค่าคุณสมบัติของระบบที่เหมาะสม ในการใช้ไลบรารีนี้คุณต้องรวมการอ้างอิงนี้ไว้ในโปรเจ็กต์ของคุณ:

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>4.2.0</version>
</dependency>

... แล้วรันบรรทัดนี้ในโปรแกรมของคุณก่อนใช้ WebDriver:

WebDriverManager.firefoxdriver().setup();

ตัวอย่างการรันที่สมบูรณ์ของกรณีทดสอบ JUnit 4 โดยใช้ WebDriver อาจเป็นดังนี้:

public class FirefoxTest {

    protected WebDriver driver;

    @BeforeClass
    public static void setupClass() {
        WebDriverManager.firefoxdriver().setup();
    }

    @Before
    public void setupTest() {
        driver = new FirefoxDriver();
    }

    @After
    public void teardown() {
        if (driver != null) {
            driver.quit();
        }
    }

    @Test
    public void test() {
        // Your test code here
    }
}

โปรดทราบว่า Marionette จะเป็นตัวเลือกเดียวสำหรับอนาคต (สำหรับ WebDriver 3+ และ Firefox 48+) แต่ปัจจุบัน (เวอร์ชัน 0.9.0 ในขณะเขียน) ยังไม่เสถียรมากนัก ดูแผนงานของ Marionetteเพื่อดูรายละเอียดเพิ่มเติม

อัปเดต

Selenium WebDriver 2.53.1ได้รับการเผยแพร่เมื่อวันที่ 30 มิถุนายน 2559 FirefoxDriverกำลังทำงานอีกครั้งกับ Firefox 47.0.1เป็นเบราว์เซอร์


9
สิ่งนี้ไม่ถูกต้อง MarionetteDriver ไม่ได้รับการสนับสนุนใน 47 จริง ๆ แม้ว่า FirefoxDriver จะเสีย เห็นได้ชัดว่า 47.0.1 จะถูกปล่อยออกมา (บางครั้ง) ซึ่ง FirefoxDriver จะทำงานอีกครั้ง Working MarionetteDriver ไม่ได้ทำให้มันกลายเป็น 47 อย่างที่คาดไว้ ดูgithub.com/mozilla/geckodriver/issues/89และbugzilla.mozilla.org/show_bug.cgi?id=1279950 - หมายเหตุ: ฉันไม่ได้บอกว่า MarionettDriver จะไม่ทำงานเลยเพียงแต่ว่ามันเสียสำหรับ TON กรณีการใช้งาน 47. การดาวน์เกรดเป็นทางเลือกเดียว ณ วันนี้
dmansfield

7
ฉันอัปเดตเป็น 47.0.1 และซีลีเนียมยังไม่เชื่อมต่อกับ Firefox Firefox ไม่ขัดข้องอีกต่อไป แต่ฉันยังคงได้รับความล้มเหลวในการเชื่อมต่อกับ 127.0.0.1:7055 เมื่อฉันเรียกใช้ TcpView ไม่มีตัวฟังพอร์ต 7055 หลังจาก Firefox เริ่มทำงาน
BardMorgan

2
ฉันเห็นพฤติกรรมเดียวกันกับ BardMorgan โดยใช้ Mac, Mono และ Selenium .NET 2.53.0 Firefox 47.0.1 เริ่มทำงาน แต่ฉันได้รับข้อผิดพลาดการหมดเวลาOpenQA.Selenium.WebDriverException: ไม่สามารถเริ่มต้นซ็อกเก็ตภายใน 45000 มิลลิวินาที พยายามเชื่อมต่อกับที่อยู่ต่อไปนี้: 127.0.0.1:7055 - netstat ไม่แสดงตัวฟังพอร์ตนั้น
Otto G

1
และตอนนี้ฉันได้ทดสอบภายใต้ Windows 10 และ. NET พื้นเมืองแล้วและปัญหาก็เหมือนกัน Netstat แสดงให้เห็นว่า Selenium พยายามเชื่อมต่อ แต่ไม่มีบริการใดรับฟัง:C:\Windows\system32>netstat -ano | find "7055" TCP 127.0.0.1:2896 127.0.0.1:7055 SYN_SENT 2052
Otto G

1
สำหรับบันทึกเมื่อไปที่ about: addons ใน Firefox 47.0.1 ที่เปิดตัวโดย Selenium 2.53.0 แท็บส่วนขยายจะแสดง "Firefox WebDriver ไม่เข้ากันกับ Firefox 47.0.1" เนื่องจากเวอร์ชันสูงสุดเป็น 47.0 ในgithub.com/SeleniumHQ/selenium/blob/selenium-2.53.0/javascript/… - เวอร์ชันส่วนหัวได้รับการแก้ไขดังนั้นการสร้างโค้ด Selenium ล่าสุดจาก GitHub ควรแก้ไขปัญหาได้
Otto G

18

ลองใช้ firefox 46.0.1 ตรงกับซีลีเนียม 2.53 มากที่สุด

https://ftp.mozilla.org/pub/firefox/releases/46.0.1/win64/en-US/

ขอบคุณ Rahman .. มันใช้งานได้แล้ว ... แต่ถ้าความต้องการใช้งานได้กับเวอร์ชันล่าสุด
veena k

หากวิธีแก้ปัญหาได้ผลคุณสามารถยอมรับคำตอบได้หรือไม่? :-)
Mahbub Rahman

8
นั่นไม่ใช่วิธีแก้ปัญหาคือดาวน์เกรดเป็นเวอร์ชันก่อนหน้า
TiGreX

1
ฉันทำเช่นนี้ด้วย (แต่ไปที่ v45) - ถ้าคุณไปตามเส้นทางนี้ตรวจสอบให้แน่ใจว่าคุณเปลี่ยนชื่อ <path> \ Mozilla Firefox \ updater.exe เป็น updater.exe.d ปิดการใช้งานเพื่อป้องกันไม่ให้รุ่นที่ลดระดับของคุณถูกอัปเกรดกลับเป็นเวอร์ชันปัจจุบัน โดยอัตโนมัติ อาจมีวิธีอื่นในการดำเนินการนี้เช่นกัน แต่การปิดการอัปเดตในการตั้งค่าตัวเลือกไม่ได้ผลสำหรับฉัน
ดึง

10

ฉันมีปัญหาเดียวกันและพบว่าคุณต้องการที่จะเปลี่ยนคนขับรถเพราะ การสนับสนุนที่ถูกทิ้ง แทนที่จะใช้Firefox Driverคุณต้องใช้Marionette Driver เพื่อทำการทดสอบ ขณะนี้ฉันกำลังดำเนินการตั้งค่าด้วยตัวเองและสามารถโพสต์ขั้นตอนที่แนะนำได้หากต้องการเมื่อฉันมีตัวอย่างการทำงาน

นี่คือขั้นตอนที่ฉันทำตามเพื่อให้สิ่งนี้ทำงานบนสภาพแวดล้อม Java ของฉันบน Mac (ใช้ได้กับฉันในการติดตั้ง Linux (Fedora, CentOS และ Ubuntu) ด้วย):

  1. ดาวน์โหลดไฟล์ปฏิบัติการทุกคืนจากหน้าเผยแพร่
  2. คลายไฟล์ที่เก็บถาวร
  3. สร้างไดเร็กทอรีสำหรับ Marionette (เช่นmkdir -p /opt/marionette)
  4. ย้ายไฟล์ปฏิบัติการที่คลายแพ็กไปยังไดเร็กทอรีที่คุณสร้างขึ้น
  5. อัปเดตของคุณ$PATHเพื่อรวมไฟล์ปฏิบัติการ (แก้ไขของคุณ.bash_profileหากคุณต้องการ)
  6. : bangbang: ตรวจสอบให้แน่ใจว่าคุณchmod +x /opt/marionette/wires-x.x.xสามารถใช้งานได้
  7. ในการเปิดตัวตรวจสอบให้แน่ใจว่าคุณใช้รหัสต่อไปนี้ด้านล่าง (เป็นรหัสที่ฉันใช้บน Mac)

หมายเหตุด่วน

ยังไม่ทำงานตามที่คาดไว้ แต่อย่างน้อยก็เปิดตัวเบราว์เซอร์ในขณะนี้ ต้องหาสาเหตุ - ตอนนี้ดูเหมือนว่าฉันต้องเขียนการทดสอบใหม่เพื่อให้ใช้งานได้

Java Snippet

WebDriver browser = new MarionetteDriver();
System.setProperty("webdriver.gecko.driver", "/opt/marionette/wires-0.7.1-OSX");

6

หากคุณใช้ OSX โดยใช้ Homebrew คุณสามารถติดตั้ง Firefox เวอร์ชันเก่าผ่านถังชง:

brew tap goldcaddy77/firefox
brew cask install firefox-46 # or whatever version you want

หลังจากติดตั้งแล้วคุณจะต้องเปลี่ยนชื่อไฟล์ปฏิบัติการ FF ของคุณในไดเร็กทอรี Applications เป็น "Firefox"

ข้อมูลเพิ่มเติมสามารถพบได้ที่คอมไพล์ repo homebrew-Firefox Props เพื่อsmclernonสำหรับการสร้างถังเดิม



3

เผื่อใครสงสัยว่าจะใช้ Marionette ใน C # ได้อย่างไร

FirefoxProfile profile = new FirefoxProfile(); // Your custom profile
var service = FirefoxDriverService.CreateDefaultService("DirectoryContainingTheDriver", "geckodriver.exe");
// Set the binary path if you want to launch the release version of Firefox.
service.FirefoxBinaryPath = @"C:\Program Files\Mozilla Firefox\firefox.exe";
var option = new FirefoxProfileOptions(profile) { IsMarionette = true };
var driver = new FirefoxDriver(
    service,
    option,
    TimeSpan.FromSeconds(30));

การแทนที่ FirefoxOptions เพื่อให้ฟังก์ชันเพิ่มความสามารถเพิ่มเติมและตั้งค่าโปรไฟล์ Firefox เนื่องจากซีลีเนียม v53ยังไม่มีฟังก์ชันนั้น

public class FirefoxProfileOptions : FirefoxOptions
{
    private DesiredCapabilities _capabilities;

    public FirefoxProfileOptions()
        : base()
    {
        _capabilities = DesiredCapabilities.Firefox();
        _capabilities.SetCapability("marionette", this.IsMarionette);
    }

    public FirefoxProfileOptions(FirefoxProfile profile)
        : this()
    {
        _capabilities.SetCapability(FirefoxDriver.ProfileCapabilityName, profile.ToBase64String());
    }

    public override void AddAdditionalCapability(string capabilityName, object capabilityValue)
    {
        _capabilities.SetCapability(capabilityName, capabilityValue);
    }

    public override ICapabilities ToCapabilities()
    {
        return _capabilities;
    }
}

หมายเหตุ: การเปิดตัวด้วยโปรไฟล์ใช้ไม่ได้กับ FF 47 แต่ใช้ได้กับ FF 50 Nightly

อย่างไรก็ตามเราได้พยายามแปลงการทดสอบของเราไปใช้ Marionette และมันไม่สามารถใช้งานได้ในขณะนี้เนื่องจากการใช้งานไดรเวอร์ยังไม่เสร็จสมบูรณ์หรือมีข้อบกพร่อง ฉันขอแนะนำให้ผู้ใช้ปรับลดรุ่น Firefox ในขณะนี้


2

ขณะนี้มีห้องสมุดซีลีเนียมใหม่ตาม: https://github.com/SeleniumHQ/selenium/issues/2110

หน้าดาวน์โหลดhttp://www.seleniumhq.org/download/ดูเหมือนจะยังไม่ได้รับการอัปเดต แต่ด้วยการเพิ่ม 1 ลงในเวอร์ชันรองในลิงก์ฉันสามารถดาวน์โหลดเวอร์ชัน C # ได้: http: // selenium-release storage.googleapis.com/2.53/selenium-dotnet-2.53.1.zip

มันใช้ได้กับฉันกับ Firefox 47.0.1

ตามบันทึกด้านข้างฉันสามารถสร้างเฉพาะส่วนขยายwebdriver.xpi Firefox จากสาขาหลักใน GitHub โดยการเรียกใช้./go //javascript/firefox-driver:webdriver:runซึ่งให้ข้อความแสดงข้อผิดพลาด แต่ได้สร้างไฟล์build / javascript / firefox-driver / webdriver.xpiซึ่งฉัน สามารถเปลี่ยนชื่อ (เพื่อหลีกเลี่ยงการปะทะกันของชื่อ) และโหลดสำเร็จด้วยเมธอด FirefoxProfile.AddExtension นั่นเป็นวิธีแก้ปัญหาที่สมเหตุสมผลโดยไม่ต้องสร้างไลบรารี Selenium ใหม่ทั้งหมด


ฉันยืนยันได้ว่าการอัปเกรดซีลีเนียมเป็น 2.53.1 ช่วยแก้ปัญหาให้ฉันได้
Disper

ตอนนี้เป็นคำตอบที่ดีที่สุด
Holistic Developer

2

มันเป็นปัญหา FF47 https://github.com/SeleniumHQ/selenium/issues/2110

โปรดปรับลดรุ่นเป็น FF 46 หรือต่ำกว่า (หรือลองใช้นักพัฒนา FF48 https://developer.mozilla.org/en-US/Firefox/Releases/48 )

คำแนะนำในการดาวน์เกรด: https://www.liberiangeek.net/2012/04/how-to-install-previous-versions-of-firefox-in-ubuntu-12-04-precise-pangolin/ หรือถ้าคุณเป็น บน Mac ตามที่คนอื่นแนะนำในเธรดนี้ใช้การชง


ตามความคิดเห็นเมื่อ 19 ชั่วโมงที่แล้ว:“ Firefox 47.0.1 ได้รับการเผยแพร่พร้อมการแก้ไข ตอนนี้เราจำเป็นต้องปล่อยไลบรารีไคลเอ็นต์เพื่อรับเวอร์ชัน Bump ใน xpi ที่ FirefoxDriver ใช้ ” ดูเหมือนจะอธิบายได้ว่าทำไมยังมีปัญหากับ 2.53.0 และ 47.0.1
Otto G

2

Firefox 47.0 หยุดทำงานกับ Webdriver

วิธีแก้ปัญหาที่ง่ายที่สุดคือเปลี่ยนไปใช้ Firefox 47.0.1 และ Webdriver 2.53.1 ชุดค่าผสมนี้ใช้ได้ผลอีกครั้ง ในความเป็นจริงการฟื้นฟู Webdriver เข้ากันได้เป็นเหตุผลหลักที่อยู่เบื้องหลัง 47.0.1 ปล่อยตามhttps://www.mozilla.org/en-US/firefox/47.0.1/releasenotes/


ตอนนี้ Firefox 47.0.1 ยังทำงานได้ดีกับ Webdriver 2.53.0 ฉันได้ทดสอบชุดค่าผสมนี้แล้ว
veena k

2

คุณสามารถลองใช้รหัสนี้

private WebDriver driver;
System.setProperty("webdriver.firefox.marionette","Your path to driver/geckodriver.exe");        
driver = new FirefoxDriver();

ฉันอัปเกรดเป็นซีลีเนียม 3.0.0 และ Firefox เวอร์ชัน 49.0.1

คุณสามารถดาวน์โหลด geckodriver.exe ได้จากhttps://github.com/mozilla/geckodriver/releases

ตรวจสอบให้แน่ใจว่าคุณดาวน์โหลดไฟล์ zip เท่านั้นไฟล์ geckodriver-v0.11.1-win64.zip หรือ win32 หนึ่งไฟล์ตามระบบของคุณและแตกไฟล์ในโฟลเดอร์

ใส่เส้นทางสำหรับโฟลเดอร์นั้นในเครื่องหมายคำพูด "Your path to driver" อย่าลืมใส่ geckodriver.exe ในเส้นทาง


1

ในที่สุดฉันก็ติดตั้ง Firefox เวอร์ชันเก่าเพิ่มเติม (ใช้สำหรับการทดสอบเท่านั้น) เพื่อแก้ไขปัญหานี้นอกเหนือจากการติดตั้ง Firefox ล่าสุด (ปลอดภัยและทันสมัย) ล่าสุดของฉัน

สิ่งนี้ต้องการให้ webdriver ทราบว่าจะหาไบนารีของ Firefox ได้จากที่ใดซึ่งสามารถตั้งค่าผ่านwebdriver.firefox.binคุณสมบัติได้

สิ่งที่ใช้ได้ผลสำหรับฉัน (mac, maven /tmp/ff46เป็นโฟลเดอร์การติดตั้ง) คือ:

mvn -Dwebdriver.firefox.bin=/tmp/ff46/Firefox.app/Contents/MacOS/firefox-bin verify

หากต้องการติดตั้ง Firefox เวอร์ชันเก่าในโฟลเดอร์เฉพาะให้สร้างโฟลเดอร์เปิด Finder ในโฟลเดอร์นั้นดาวน์โหลด Firefox dmg แล้วลากไปยัง Finder นั้น



1

ณ เดือนกันยายน 2559

Firefox 48.0และselenium==2.53.6ทำงานได้ดีโดยไม่มีข้อผิดพลาดใด ๆ

ในการอัปเกรด firefox Ubuntu 14.04 เท่านั้น

sudo apt-get update
sudo apt-get upgrade firefox

1

สำหรับฉันแล้วดูเหมือนว่าทางออกที่ดีที่สุดคือการอัปเดตเป็น Selenium 3.0.0 ดาวน์โหลด geckodriver.exe และใช้ Firefox 47 หรือสูงกว่า

ฉันเปลี่ยนการเริ่มต้น Firefox เป็น:

 string geckoPathTest = Path.Combine(Environment.CurrentDirectory, "TestFiles\\geckodriver.exe");
 string geckoPath = Path.Combine(Environment.CurrentDirectory, "geckodriver.exe");
 File.Copy(geckoPathTest, geckoPath);
 Environment.SetEnvironmentVariable("webdriver.gecko.driver", geckoPath);
 _firefoxDriver = new FirefoxDriver();

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.