2016-01-18 8 views
5

मैं कैसे एक कंपनी की प्रॉक्सी के पीछे से RemoteWebDriver के माध्यम से इस तरह के BrowserStack के रूप में एक सेलेनियम ग्रिड से कनेक्ट कर सकते हैं?कॉर्पोरेट प्रॉक्सी के पीछे सेलेनियम RemoteWebDriver का उपयोग

परीक्षण के अंतर्गत आवेदन प्रॉक्सी और BrowserStack से स्वतंत्र रूप से सुलभ के बाहर है।

यह Using Selenium RemoteWebDriver behind corporate proxy (Java) stackoverflow सवाल वही सवाल पूछा लेकिन मैं स्वीकार किए जाते हैं जवाब का पालन नहीं कर सका।

उत्तर

9

मैं जुड़ा हुआ stackoverflow सवाल में स्वीकार किए जाते हैं उत्तर के आधार पर कार्य कुछ पाने में कामयाब रहे, यहां देखें कि किसी और मामले किसी को भी मेरी कार्यान्वयन एक ही समस्या पर अटक जाता है:

उदाहरण

import java.net.InetAddress; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.UnknownHostException; 
import java.util.HashMap; 
import java.util.Map; 

import org.apache.http.HttpHost; 
import org.apache.http.auth.AuthScope; 
import org.apache.http.auth.NTCredentials; 
import org.apache.http.auth.UsernamePasswordCredentials; 
import org.apache.http.client.CredentialsProvider; 
import org.apache.http.impl.client.BasicCredentialsProvider; 
import org.apache.http.impl.client.HttpClientBuilder; 
import org.openqa.selenium.remote.CommandInfo; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.openqa.selenium.remote.HttpCommandExecutor; 
import org.openqa.selenium.remote.RemoteWebDriver; 
import org.openqa.selenium.remote.http.HttpClient.Factory; 

public class Example { 
    public RemoteWebDriver connectViaProxy(DesiredCapabilities caps) { 
     String proxyHost = "?"; 
     int proxyPort = 8080; 
     String proxyUserDomain = "?"; 
     String proxyUser = "?"; 
     String proxyPassword = "?"; 

     URL url; 

     try { 
      url = new URL("http://bsuser:[email protected]/wd/hub"); 
     } catch (MalformedURLException e) { 
      throw new RuntimeException(e.getMessage(), e); 
     } 

     HttpClientBuilder builder = HttpClientBuilder.create(); 

     HttpHost proxy = new HttpHost(proxyHost, proxyPort); 

     CredentialsProvider credsProvider = new BasicCredentialsProvider(); 

     credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort), new NTCredentials(proxyUser, proxyPassword, getWorkstation(), proxyUserDomain)); 

     if (url.getUserInfo() != null && !url.getUserInfo().isEmpty()) { 
      credsProvider.setCredentials(new AuthScope(url.getHost(), (url.getPort() > 0 ? url.getPort() : url.getDefaultPort())), new UsernamePasswordCredentials(url.getUserInfo())); 
     } 

     builder.setProxy(proxy); 
     builder.setDefaultCredentialsProvider(credsProvider); 

     Factory factory = new MyHttpClientFactory(builder); 

     HttpCommandExecutor executor = new HttpCommandExecutor(new HashMap<String, CommandInfo>(), url, factory); 

     return new RemoteWebDriver(executor, caps); 
    } 

    private String getWorkstation() { 
     Map<String, String> env = System.getenv(); 

     if (env.containsKey("COMPUTERNAME")) { 
      // Windows 
      return env.get("COMPUTERNAME");   
     } else if (env.containsKey("HOSTNAME")) { 
      // Unix/Linux/MacOS 
      return env.get("HOSTNAME"); 
     } else { 
      // From DNS 
      try 
      { 
       return InetAddress.getLocalHost().getHostName(); 
      } 
      catch (UnknownHostException ex) 
      { 
       return "Unknown"; 
      } 
     } 
    } 
} 

MyHttpClientFactory

import java.net.URL; 

import org.apache.http.impl.client.HttpClientBuilder; 
import org.openqa.selenium.remote.internal.ApacheHttpClient; 

public class MyHttpClientFactory implements org.openqa.selenium.remote.http.HttpClient.Factory { 
    final HttpClientBuilder builder; 

    public MyHttpClientFactory(HttpClientBuilder builder) { 
     this.builder = builder; 
    } 

    @Override 
    public org.openqa.selenium.remote.http.HttpClient createClient(URL url) { 
     return new ApacheHttpClient(builder.build(), url); 
    } 
} 
+0

यह बेहद उपयोगी था, धन्यवाद। मुझे इस मुद्दे के बारे में बात करने वाले कोई अन्य दस्तावेज नहीं मिला है। यह हमारे कॉर्पोरेट नेटवर्क में अच्छी तरह से काम किया। –

संबंधित मुद्दे