java - Selenium WebDriver + Java - 如何为 Firefox 配置代理设置?

标签 java selenium proxy webdriver selenium-firefoxdriver

我是一名使用 selenium 2.45 的新手测试开发人员,我正在尝试配置我的 FirefoxDriver 以使用我公司的代理设置。我没有这样做:)

我正在按照此处的说明即时创建配置文件:

Using a Proxy for FF

我的代码是这样的:

public static WebDriver driver;

String usedProxy = "http://myproxy:8080";

    org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy();
    proxy.setHttpProxy(usedProxy).setFtpProxy(usedProxy).setSslProxy(usedProxy);
    DesiredCapabilities cap = new DesiredCapabilities();
    cap.setCapability(CapabilityType.PROXY, proxy);

    driver = new FirefoxDriver(cap);
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get("https://TestWebsite.com");

我没有收到任何类型的错误,但连接不适用于此浏览器。从 Firefox 菜单中检查选项>高级>网络>连接设置时,代理设置为手动,但文本输入仅包含“http://”

PS:我觉得这是相关的但我不确定:TestWebsite.com 将仅通过 https 加载(它是一个购物车)

最佳答案

如果您的目标是在不同的 IP 地址上测试您的功能,您可以使用 Tor 浏览器。

public IWebDriver Driver { get; set; }
public Process TorProcess { get; set; }
public WebDriverWait Wait { get; set; }

[TestInitialize]
public void SetupTest()
{
    String torBinaryPath = @"C:\Users\aangelov\Desktop\Tor Browser\Browser\firefox.exe";
    this.TorProcess = new Process();
    this.TorProcess.StartInfo.FileName = torBinaryPath;
    this.TorProcess.StartInfo.Arguments = "-n";
    this.TorProcess.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
    this.TorProcess.Start();

    FirefoxProfile profile = new FirefoxProfile();
    profile.SetPreference("network.proxy.type", 1);
    profile.SetPreference("network.proxy.socks", "127.0.0.1");
    profile.SetPreference("network.proxy.socks_port", 9150);
    this.Driver = new FirefoxDriver(profile);
    this.Wait = new WebDriverWait(this.Driver, TimeSpan.FromSeconds(60));
}

[TestCleanup]
public void TeardownTest()
{
    this.Driver.Quit();
    this.TorProcess.Kill();
}

这是刷新 Tor 身份的代码。

public void RefreshTorIdentity()
{
    Socket server = null;
    try
    {
        IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9151);
        server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        server.Connect(ip);
        server.Send(Encoding.ASCII.GetBytes("AUTHENTICATE \"johnsmith\"" + Environment.NewLine));
        byte[] data = new byte[1024];
        int receivedDataLength = server.Receive(data);
        string stringData = Encoding.ASCII.GetString(data, 0, receivedDataLength);
        server.Send(Encoding.ASCII.GetBytes("SIGNAL NEWNYM" + Environment.NewLine));
        data = new byte[1024];
        receivedDataLength = server.Receive(data);
        stringData = Encoding.ASCII.GetString(data, 0, receivedDataLength);
        if (!stringData.Contains("250"))
        {
            Console.WriteLine("Unable to signal new user to server.");
            server.Shutdown(SocketShutdown.Both);
            server.Close();
        }
    }
    finally
    {
        server.Close();
    }
}

您可以在此处找到更多详细信息:http://automatetheplanet.com/using-selenium-webdriver-tor-c-code/

代码示例是用 C# 编写的,但代码在 Java 中应该是相同的。

关于java - Selenium WebDriver + Java - 如何为 Firefox 配置代理设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30301117/

相关文章:

java - 日期时间加期间显示不正确的时区

python Selenium 元素不可见

java - 如何降低将 vector 转换为矩阵的时间复杂度

python - 使用 selenium webdriver 获取浏览器版本

ant - JaCoCo Selenium 测试代码覆盖率并使用 Ant 导入 Sonar

http - HTTP Web Server 和 Ingress 的区别?

c# - 是否有用于通过 PROXY 发送电子邮件的 .NET 库?

docker-proxy 接受 Accept4 : bad file descriptor

java - Android linphone.jar错误:Execution failed for task ':app:dexDebug'

java - Web 应用程序无缘无故抛出 java.net.SocketException