[java] Firefox 47에서 Selenium 2.53이 작동하지 않음

WebDriver와 함께 Firefox를 사용하는 동안 오류가 발생합니다.

org.openqa.selenium.firefox.NotConnectedException: Unable to connect
to host 127.0.0.1 on port 7055 after 45000 ms.
  • Firefox 버전 : 47.0
  • 셀레늄 : 2.53.0
  • Windows 10 64 비트

비슷한 문제가 있거나 이것에 대한 해결책이 무엇인지 아는 사람이 있습니까? Chrome에서는 잘 작동하지만 Firefox에서는 URL이로드되지 않습니다.



답변

불행히도 Selenium WebDriver 2.53.0은 Firefox 47.0과 호환되지 않습니다. Firefox 브라우저 ( FirefoxDriver) 를 처리하는 WebDriver 구성 요소 는 중단됩니다. 버전 3.0부터 Selenium WebDriver는 geckodriverFirefox 브라우저를 관리하기 위해 바이너리 가 필요 합니다. 여기여기에 더 많은 정보가 있습니다 .

따라서 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 라이브러리 가이 작업을 수행 할 수 있습니다. 즉, 컴퓨터 (Linux, Mac 또는 Windows)에 적합한 Marionette 바이너리를 다운로드하고 적절한 시스템 속성 값을 내보낼 수 있습니다. 이 라이브러리를 사용하려면이 종속성을 프로젝트에 포함해야합니다.

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

… 그리고 WebDriver를 사용하기 전에 프로그램에서 다음 줄을 실행하십시오.

WebDriverManager.firefoxdriver().setup();

WebDriver를 사용하는 JUnit 4 테스트 케이스의 전체 실행 예제는 다음과 같습니다.

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 은 2016 년 6 월 30 일에 출시되었습니다 . 브라우저 FirefoxDriver로 Firefox 47.0.1 과 함께 다시 작동 합니다.


답변

firefox 46.0.1을 사용해보십시오. Selenium 2.53과 가장 잘 어울립니다.

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


답변

나는 같은 문제가 있었고 지원이 중단 되었기 때문에 드라이버를 전환해야한다는 것을 알게되었습니다 . Firefox 드라이버 를 사용하는 대신 테스트를 실행하려면 Marionette 드라이버 를 사용해야합니다 . 저는 현재 직접 설정 작업을하고 있으며 작업 예제가있을 때 원하는 경우 몇 가지 제안 된 단계를 게시 할 수 있습니다.

Mac의 Java 환경에서이 작업을 수행하기 위해 수행 한 단계는 다음과 같습니다 (내 Linux 설치 (Fedora, CentOS 및 Ubuntu)에서도 작동 함).

  1. 릴리스 페이지 에서 야간 실행 파일 다운로드
  2. 아카이브 압축 풀기
  3. 마리오네트에 대한 디렉토리를 작성하십시오 (예 mkdir -p /opt/marionette)
  4. 압축을 푼 실행 파일을 만든 디렉토리로 이동하십시오.
  5. $PATH실행 파일을 포함하도록 업데이트하십시오 ( .bash_profile원하는 경우 편집하십시오 ).
  6. : bangbang : chmod +x /opt/marionette/wires-x.x.x실행 가능한지 확인하십시오
  7. 출시 할 때 아래 코드를 사용해야합니다 (Mac에서 사용한 코드 임).

퀵 노트

여전히 예상대로 작동하지 않지만 적어도 지금 브라우저가 시작됩니다. 이유를 알아 내야합니다. 지금은 테스트를 다시 작성해야하는 것 같습니다.

자바 스 니펫

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


답변

Homebrew를 사용하는 OSX를 사용하는 경우 brew cask를 통해 이전 Firefox 버전을 설치할 수 있습니다.

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

설치 후 Applications 디렉토리에있는 FF 실행 파일의 이름을 “Firefox”로 변경하면됩니다.

자세한 정보는 git repo homebrew-firefox 에서 찾을 수 있습니다 . 원래 통 을 만들기위한 smclernon의 소품 .


답변

Mac을 사용하고 있다면 brew install geckodriver가십시오!


답변

누구든지 C #에서 Marionette를 사용하는 방법을 궁금해하는 경우.

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

추가 기능을 추가하고 Firefox 프로필을 설정하는 기능을 제공하도록 FirefoxOptions를 재정의합니다. selenium 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를 다운 그레이드하는 것이 좋습니다.


답변

https://github.com/SeleniumHQ/selenium/issues/2110 에 따르면 새로운 Selenium 라이브러리가 출시되었습니다.

다운로드 페이지 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 실행하여, GitHub의에서 마스터 지점에서 파이어 폭스 확장 ./go //javascript/firefox-driver:webdriver:run오류 메시지 듯했으나 구축 않았다 – 빌드 / 자바 스크립트 / 파이어 폭스 드라이버 / webdriver.xpi의 , 어떤 I을 파일을 이름이 충돌하지 않도록 이름을 바꾸고 FirefoxProfile.AddExtension 메서드를 사용하여 성공적으로로드 할 수 있습니다. 전체 Selenium 라이브러리를 다시 빌드하지 않고도 합리적인 해결 방법이었습니다.