如何通过外部代理服务器发送无头SeleniumRC测试



我需要在无头Ubuntu服务器上使用Selenium RC,使用外部代理服务器对网站进行测试,以模拟不同国家的用户。

为了测试这个过程,我创建了一个非常简单的PHPUnit测试脚本,它基本上可以:

$this->setBrowser("*firefox");
$this->setBrowserUrl("http://www.ipchicken.com/");
$this->open("/");
$this->assertTrue($this->isTextPresent(<proxy ip>));

我使用以下代理服务器指令启动Selenium RC(在代理上没有身份验证):

export DISPLAY=":99" && java -Dhttp.proxyHost=<proxy ip> -Dhttp.proxyPort=<proxy port> -jar /var/lib/selenium/selenium-server.jar -avoidProxy

但是我的测试脚本没有通过断言。如果我将测试更改为断言我的Selenium服务器IP地址,断言就会通过,这让我觉得Selenium是在直接向ipchicken.com发送"打开"请求,而不是通过代理服务器发送。

selenium服务器可以访问代理服务器——我已经用一个简单的PHP Curl脚本测试过了。如果我通过代理服务器使用Curl请求ipchicken.com,它会返回代理服务器的IP地址。

我在尝试让代理在Ubuntu系统上工作时遇到了同样的问题,无法让-Dttp.proxyHost等设置工作。我的解决方案是在java命令之前导出http_proxy,就像使用DISPLAY一样。

export http_proxy = http://username:password@host:port

更新:由于您使用的是firefox,您还需要在firefox中设置适当的代理设置。(您在评论中提到的挂起是firefox未能通过代理)。您需要使用运行firefox profilemanager

firefox -ProfileManager

然后创建一个新的配置文件。为配置文件的路径创建一个新目录,因为它将在该位置放置大量文件。在该配置文件中创建适当的代理设置。现在,您可以将firefoxProfileTemplate选项与selenium rc:一起使用

 java -jar ..... -firefoxProfileTemplate /path/to/your/new/profile

请注意,您只需要运行概要文件管理器一次,因此之后您就可以无头运行了。

我将简要解释使用Selenium Grid
1.首先在Linux上使用Xorg:96-ac启动显示
2.现在导出DISPLAY=96。
3.启动firefox
4.使用硒栅格启动硒端口
以上步骤应在Linux服务器上完成

1.在linux上启动selenium服务器之前,请启动机器上的hub
2.现在执行脚本,它将转到linux上的活动端口

感谢

最新更新