gpt4 book ai didi

java - 在公司代理后面使用 Selenium RemoteWebDriver

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:17 24 4
gpt4 key购买 nike

如何从公司代理后面通过 RemoteWebDriver 连接到 Selenium 网格,例如 BrowserStack?

被测应用程序在代理之外,可从 BrowserStack 自由访问。

Using Selenium RemoteWebDriver behind corporate proxy (Java) stackoverflow 问题问了同样的问题,但我无法遵循已接受的答案。

最佳答案

我设法根据链接的 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:bspassword@hub.browserstack.com/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);
}
}

关于java - 在公司代理后面使用 Selenium RemoteWebDriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34846014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com