2016-06-12 2 views
4

Firefox 47 이상은 Selenium Webdriver를 지원하지 않습니다. Marionette 드라이버를 사용하여 Firefox를 통해 테스트를 시작하려고했습니다.마리오 네트 드라이버를 통해 Firefox 브라우저에서 프록시 설정

Firefox 설정 (프록시는 network.proxy.type = 4, 자동 감지로 설정되어야 함)의 설정은 더 이상 Firefox 설정에 적용되지 않습니다 (Firefox는 열리지 만 모든 설정은 기본적으로 설정 됨). 올바른 PROXY 구성이 없으면 테스트가 작동하지 않습니다. .

어떻게 마리오네트 드라이버를 통해 Firefox 브라우저에서 프록시를 설정할 수 있습니까?

답변

1

firefoxProfile 또는 Proxy 클래스의 기존 트릭이 더 이상 작동하지 않습니다.

[{프록시 = { "의 proxyType": "MANUAL", "에서 httpProxy": "host.proxy를", "httpProxyPort"당신이해야 할 모든 requiredCapabilities을 통해 새로운 마리오네트 프록시 형식의 JSON을 통과하다 80 "sslProxy": "host.proxy", "sslProxyPort": 80}}]

더 이상 "proxyHost : 프락시 포트"형식이지만에서 httpProxy = 호스트 httpProxyPort = 포트. 여기

JsonObject json = new JsonObject(); 
json.addProperty("proxyType", "MANUAL"); 
json.addProperty("httpProxy", aHost); 
json.addProperty("httpProxyPort", aPort); 
json.addProperty("sslProxy", aHost); 
json.addProperty("sslProxyPort", aPort); 

required.setCapability("proxy", json); 

driver = new FirefoxDriver(service, cap, required); 

모든 코드 :

import java.io.File; 

수입 때 java.io.IOException;

import org.apache.commons.lang.SystemUtils; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxBinary; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.firefox.GeckoDriverService; 
import org.openqa.selenium.remote.DesiredCapabilities; 

import com.google.common.collect.ImmutableMap; 
import com.google.gson.JsonObject; 

public class TestProxy 
{ 
    public static void main(String[] args) 
    { 
    if (args.length == 0) 
    { 
     System.out.println("usage: IP port"); 
     System.exit(-1); 
    } 

    String proxyServer = args[0]; 
    int proxyPort = Integer.parseInt(args[1]); 

    try 
    { 
     TestProxy test = new TestProxy(); 
     test.TestDriver(proxyServer, proxyPort); 
    } catch (IOException e) 
    { 
     e.printStackTrace(); 
    }  
    } 

    private void TestDriver(String aHost, int aPort) throws IOException 
    { 
    WebDriver driver = null; 
    GeckoDriverService service = null; 

    if (SystemUtils.IS_OS_LINUX) 
    { 
     FirefoxBinary firefoxBinary = new FirefoxBinary(new File("/home/ubuntu/firefox/firefox")); 

     service = new GeckoDriverService.Builder(firefoxBinary) 
      .usingDriverExecutable(new File("/usr/bin/geckodriver")) 
      .usingAnyFreePort() 
      .usingAnyFreePort() 
      .withEnvironment(ImmutableMap.of("DISPLAY",":20")) 
      .build(); 
     service.start();  
    } 
    else if (SystemUtils.IS_OS_WINDOWS) 
    { 
     FirefoxBinary firefoxBinary = new FirefoxBinary(new File("C:\\Program Files\\Mozilla Firefox\\firefox.exe")); 

     service = new GeckoDriverService.Builder(firefoxBinary) 
      .usingDriverExecutable(new File("C:\\Windows\\geckodriver.exe")) 
      .usingAnyFreePort() 
      .usingAnyFreePort() 
      .build(); 
     service.start();  
    } 
    else 
    { 
     System.out.println("Unknown operation system"); 
     System.exit(-1); 
    } 

    DesiredCapabilities cap = DesiredCapabilities.firefox(); 
    DesiredCapabilities required = new DesiredCapabilities(); 

    JsonObject json = new JsonObject(); 
    json.addProperty("proxyType", "MANUAL"); 
    json.addProperty("httpProxy", aHost); 
    json.addProperty("httpProxyPort", aPort); 
    json.addProperty("sslProxy", aHost); 
    json.addProperty("sslProxyPort", aPort); 

    required.setCapability("proxy", json); 

    driver = new FirefoxDriver(service, cap, required); 

    driver.navigate().to("https://api.ipify.org/?format=text"); 

    System.out.println(driver.getPageSource()); 

    driver.quit(); 
    } 
} 

https://github.com/SeleniumHQ/selenium/issues/2963

https://github.com/mozilla/geckodriver/issues/97#issuecomment-255386464