Selenium 2.53 không hoạt động trên Firefox 47


107

Tôi gặp lỗi khi sử dụng Firefox với WebDriver.

org.openqa.selenium.firefox.NotConnectedException: Unable to connect
to host 127.0.0.1 on port 7055 after 45000 ms.
  • Phiên bản Firefox: 47.0
  • Selen: 2,53,0
  • Windows 10 64 bit

Có ai nhận được một vấn đề tương tự hoặc bất kỳ ý tưởng nào là giải pháp cho điều này? Nó hoạt động tốt với Chrome nhưng với Firefox thì không có URL nào được tải.


1
Có tôi cũng nhận được cùng một lỗi. Tôi đang gỡ cài đặt và cài đặt lại. Nếu trình duyệt của bạn đang mở, hãy đặt lại và thử.
Kishan Patel

Hi Kishan, tôi đã cố gắng như bạn nói nhưng vẫn cùng một lỗi ... vì vậy tôi đã hạ cấp xuống 46.0.1
Veena k

Vâng. đã xảy ra một số vấn đề về bộ chặn chương trình từ mozilla. họ đã cập nhật phiên bản. Bạn lại có thể rollback đến 47. :-)
Kishan Patel


1
Sự cố này tự xuất hiện trên OSX với lỗi '"Firefox.bin" không thể mở được vì không thể xác nhận danh tính của nhà phát triển:'. Hạ cấp xuống 46 đã giải quyết được vấn đề này.
hoosteeno

Câu trả lời:


93

Rất tiếc, Selenium WebDriver 2.53.0 không tương thích với Firefox 47.0. Thành phần WebDriver xử lý trình duyệt Firefox ( FirefoxDriver) sẽ bị ngừng hoạt động. Kể từ phiên bản 3.0, Selenium WebDriver sẽ cần geckodrivertệp nhị phân để quản lý trình duyệt Firefox. Thêm thông tin ở đâyở đây .

Do đó, để sử dụng Firefox 47.0 làm trình duyệt với Selenium WebDriver 2.53.0, bạn cần tải xuống trình điều khiển Firefox (là tệp nhị phân được gọi geckodriverlà phiên bản 0.8.0 và trước đây wires) và xuất đường dẫn tuyệt đối của nó sang biến webdriver.gecko.drivernhư thuộc tính hệ thống trong mã Java của bạn:

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

May mắn thay, thư viện WebDriverManager có thể thực hiện công việc này cho bạn, tức là tải xuống tệp nhị phân Marionette thích hợp cho máy của bạn (Linux, Mac hoặc Windows) và xuất giá trị của thuộc tính hệ thống thích hợp. Để sử dụng thư viện này, bạn cần đưa phần phụ thuộc này vào dự án của mình:

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

... và sau đó thực thi dòng này trong chương trình của bạn trước khi sử dụng WebDriver:

WebDriverManager.firefoxdriver().setup();

Một ví dụ chạy hoàn chỉnh của trường hợp thử nghiệm JUnit 4 sử dụng WebDriver có thể như sau:

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
    }
}

Lưu ý rằng Marionette sẽ là lựa chọn duy nhất cho tương lai (cho WebDriver 3+ và Firefox 48+), nhưng hiện tại (phiên bản 0.9.0 tại thời điểm viết bài) không ổn định lắm. Hãy xem lộ trình Marionette để biết thêm chi tiết.

CẬP NHẬT

Selenium WebDriver 2.53.1 đã được phát hành vào ngày 30 tháng 6 năm 2016. Hiện FirefoxDriverđang hoạt động trở lại với Firefox 47.0.1 dưới dạng trình duyệt.


9
Điều này là không đúng. MarionetteDriver thực sự KHÔNG được hỗ trợ trong 47, mặc dù thực tế là FirefoxDriver đã bị hỏng. Rõ ràng 47.0.1 sẽ được phát hành (đôi khi) trong đó FirefoxDriver sẽ hoạt động trở lại. Làm việc MarionetteDriver đã không đạt được thành 47 như mong đợi. Xem github.com/mozilla/geckodriver/issues/89bugzilla.mozilla.org/show_bug.cgi?id=1279950 - Lưu ý: Tôi không nói rằng MarionettDriver sẽ không hoạt động, chỉ là nó bị hỏng vì TON trong số các trường hợp sử dụng với 47. Hạ cấp là lựa chọn duy nhất cho đến hôm nay.
dmansfield

7
Tôi đã cập nhật lên 47.0.1 và Selenium vẫn không kết nối với Firefox. Nó không còn bị treo Firefox nữa, nhưng tôi vẫn gặp lỗi không kết nối được với 127.0.0.1:7055. Khi tôi chạy TcpView, không có người nghe cổng 7055 sau khi Firefox khởi động.
BardMorgan

2
Tôi thấy hành vi tương tự như BardMorgan, sử dụng Mac, Mono và Selenium .NET 2.53.0. Firefox 47.0.1 khởi động, nhưng tôi gặp lỗi hết thời gian chờ OpenQA.Selenium.WebDriverException: Không thể khởi động ổ cắm trong vòng 45000 mili giây. Đã cố gắng kết nối với các địa chỉ sau: 127.0.0.1:7055 - netstat hiển thị không có người nghe nào đối với cổng đó.
Otto G

1
Và bây giờ tôi cũng đã thử nghiệm trên Windows 10 và .NET bản địa, và vấn đề cũng vậy. Chương trình netstat rằng Selenium cố gắng kết nối, nhưng không có dịch vụ đang lắng nghe:C:\Windows\system32>netstat -ano | find "7055" TCP 127.0.0.1:2896 127.0.0.1:7055 SYN_SENT 2052
Otto G

1
Đối với hồ sơ, khi truy cập vào about: addons trong Firefox 47.0.1 do Selenium 2.53.0 khởi chạy, tab Extensions sẽ hiển thị “Firefox WebDriver không tương thích với Firefox 47.0.1.” Điều này là do phiên bản tối đa là 47.0 trong github.com/SeleniumHQ/selenium/blob/selenium-2.53.0/javascript/… - phiên bản head đã được sửa, vì vậy bản dựng mã Selenium mới nhất từ ​​GitHub sẽ khắc phục được sự cố.
Otto G

18

Hãy thử sử dụng firefox 46.0.1. Nó phù hợp nhất với Selenium 2.53

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

Cảm ơn Rahman .. hiện tại nó đang hoạt động ... nhưng nếu yêu cầu là hoạt động với phiên bản mới nhất.
veena k

Nếu giải pháp hiệu quả, bạn có thể vui lòng chấp nhận câu trả lời không? :-)
Mahbub Rahman

8
đó không phải là một giải pháp, đang hạ cấp xuống phiên bản trước.
TiGreX

1
Tôi cũng đã làm điều này (nhưng đã đi đến v45) - nếu bạn đi xuống đường dẫn này, hãy đảm bảo rằng bạn đổi tên <path> \ Mozilla Firefox \ updater.exe thành updater.exe.disable để ngăn phiên bản đã hạ cấp của bạn được nâng cấp trở lại phiên bản hiện tại tự động. Có thể có nhiều cách khác để đạt được điều này - nhưng việc tắt cập nhật trong cài đặt tùy chọn không hoạt động với tôi.
Drew

10

Tôi gặp vấn đề tương tự và phát hiện ra rằng bạn cần chuyển đổi trình điều khiển vì hỗ trợ đã bị ngắt . Thay vì sử dụng Trình điều khiển Firefox , bạn cần sử dụng Trình điều khiển Marionette để chạy thử nghiệm của mình. Tôi hiện đang tự mình thiết lập và có thể đăng một số bước được đề xuất nếu bạn muốn khi tôi có một ví dụ làm việc.

Dưới đây là các bước tôi đã làm theo để làm cho điều này hoạt động trên môi trường Java của tôi trên Mac (phù hợp với tôi trong các bản cài đặt Linux của tôi (Fedora, CentOS và Ubuntu)):

  1. Tải xuống tệp thực thi hàng đêm từ trang phát hành
  2. Giải nén kho lưu trữ
  3. Tạo một thư mục cho Marionette (tức là, mkdir -p /opt/marionette)
  4. Di chuyển tệp thực thi được giải nén vào thư mục bạn đã tạo
  5. Cập nhật của bạn $PATHđể bao gồm tệp thực thi (ngoài ra, hãy chỉnh sửa của bạn .bash_profilenếu bạn muốn)
  6. : bangbang: Hãy chắc chắn rằng bạn chmod +x /opt/marionette/wires-x.x.xđể nó có thể thực thi được
  7. Khi khởi chạy, hãy đảm bảo bạn sử dụng mã sau đây (đó là mã tôi đã sử dụng trên Mac)

Sổ tay

Vẫn không hoạt động như mong đợi, nhưng ít nhất trình duyệt được khởi chạy ngay bây giờ. Cần tìm ra lý do tại sao - ngay bây giờ có vẻ như tôi cần viết lại các bài kiểm tra của mình để nó hoạt động.

Đoạn mã Java

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

6

Nếu đang sử dụng OSX bằng Homebrew, bạn có thể cài đặt các phiên bản Firefox cũ qua thùng bia:

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

Sau khi cài đặt, bạn chỉ cần đổi tên tệp thực thi FF của mình trong thư mục Ứng dụng thành "Firefox".

Bạn có thể tìm thêm thông tin tại git repo homebrew-firefox . Đạo cụ cho smclernon để tạo thùng gốc .


6

Nếu bạn đang sử dụng máy Mac, hãy làm brew install geckodrivervà tắt bạn đi!


3

Trong trường hợp có ai đang thắc mắc về cách sử dụng Marionette trong 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));

Ghi đè FirefoxOptions để cung cấp chức năng thêm khả năng bổ sung và đặt cấu hình Firefox vì selenium v53 chưa cung cấp chức năng đó.

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;
    }
}

Lưu ý: Khởi chạy với cấu hình không hoạt động với FF 47, nó hoạt động với FF 50 Nightly.

Tuy nhiên, chúng tôi đã cố gắng chuyển đổi thử nghiệm của mình sang sử dụng Marionette và hiện tại nó không khả thi vì quá trình triển khai trình điều khiển chưa hoàn thành hoặc có lỗi. Tôi khuyên mọi người nên hạ cấp Firefox của họ vào lúc này.


2

Các thư viện Selenium mới hiện đã ra mắt, theo: https://github.com/SeleniumHQ/selenium/issues/2110

Trang tải xuống http://www.seleniumhq.org/download/ có vẻ như vẫn chưa được cập nhật, nhưng bằng cách thêm 1 vào phiên bản phụ trong liên kết, tôi có thể tải xuống phiên bản C #: http: // selenium-release. Storage.googleapis.com/2.53/selenium-dotnet-2.53.1.zip

Nó hoạt động với tôi với Firefox 47.0.1.

Lưu ý thêm, tôi chỉ có thể tạo phần mở rộng webdriver.xpi Firefox từ nhánh chính trong GitHub, bằng cách chạy ./go //javascript/firefox-driver:webdriver:run- đã đưa ra thông báo lỗi nhưng đã tạo tệp build / javascript / firefox-driver / webdriver.xpi , mà tôi có thể đổi tên (để tránh trùng tên) và tải thành công bằng phương thức FirefoxProfile.AddExtension. Đó là một cách giải quyết hợp lý mà không cần phải xây dựng lại toàn bộ thư viện Selenium.


Tôi có thể xác nhận rằng việc nâng cấp selen lên 2.53.1 đã giải quyết được vấn đề cho tôi.
Disper

Đây bây giờ là câu trả lời tốt nhất.
Nhà phát triển toàn diện

2

Đó là sự cố FF47 https://github.com/SeleniumHQ/selenium/issues/2110

Vui lòng hạ cấp xuống FF 46 trở xuống (hoặc dùng thử nhà phát triển FF48 https://developer.mozilla.org/en-US/Firefox/Releases/48 )

Hướng dẫn cách hạ cấp: https://www.liberiangeek.net/2012/04/how-to-install-previous-versions-of-firefox-in-ubuntu-12-04-precise-pangolin/ Hoặc nếu bạn đang trên Mac, như được đề xuất bởi người khác trong chủ đề này sử dụng brew.


Theo một bình luận cách đây 19 giờ: “ Firefox 47.0.1 đã được phát hành với một bản sửa lỗi. Bây giờ chúng tôi cần phát hành các thư viện ứng dụng khách để chọn phiên bản xpi được FirefoxDriver sử dụng . ” Điều đó dường như giải thích tại sao vẫn có vấn đề với 2.53.0 và 47.0.1.
Otto G

2

Firefox 47.0 ngừng hoạt động với Webdriver.

Giải pháp dễ nhất là chuyển sang Firefox 47.0.1 và Webdriver 2.53.1. Sự kết hợp này một lần nữa hoạt động. Trên thực tế, việc khôi phục khả năng tương thích của Webdriver là lý do chính đằng sau bản phát hành 47.0.1, theo https://www.mozilla.org/en-US/firefox/47.0.1/releasenotes/ .


Hiện Firefox 47.0.1 cũng đang hoạt động tốt với Webdriver 2.53.0. Tôi đã thử nghiệm sự kết hợp này.
veena k

2

Bạn có thể thử sử dụng mã này,

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

Tôi đã nâng cấp lên selenium 3.0.0 và phiên bản Firefox là 49.0.1

Bạn có thể tải xuống geckodriver.exe từ https://github.com/mozilla/geckodriver/releases

Đảm bảo bạn chỉ tải xuống tệp zip, tệp geckodriver-v0.11.1-win64.zip hoặc win32 tùy theo hệ thống của bạn và giải nén nó trong một thư mục.

Đặt đường dẫn cho thư mục đó trong dấu ngoặc kép "Đường dẫn đến trình điều khiển của bạn". Đừng quên đặt geckodriver.exe trong đường dẫn.


1

Cuối cùng, tôi đã cài đặt một phiên bản Firefox cũ bổ sung (chỉ dùng để thử nghiệm) để giải quyết vấn đề này, bên cạnh cài đặt Firefox mới nhất thường xuyên (an toàn, cập nhật) của tôi.

Điều này yêu cầu webdriver phải biết nơi nó có thể tìm thấy tệp nhị phân Firefox, có thể được đặt thông qua thuộc webdriver.firefox.bintính.

Những gì phù hợp với tôi (mac, maven, /tmp/ff46làm thư mục cài đặt) là:

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

Để cài đặt phiên bản Firefox cũ trong một thư mục chuyên dụng, hãy tạo thư mục, mở Finder trong thư mục đó, tải xuống Firefox dmg và kéo nó vào Finder đó.



1

Tính đến tháng 9 năm 2016

Firefox 48.0selenium==2.53.6hoạt động tốt mà không có bất kỳ lỗi nào

Để nâng cấp firefox chỉ trênUbuntu 14.04

sudo apt-get update
sudo apt-get upgrade firefox

1

Đối với tôi, giải pháp tốt nhất là cập nhật lên Selenium 3.0.0, tải xuống geckodriver.exe và sử dụng Firefox 47 trở lên.

Tôi đã thay đổi phần khởi tạo Firefox thành:

 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();

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.