我目前正在尝试使用 BrowserMob 设置 Selenium WebDriver,以在测试中捕获网络请求。目前我的设置如下:
在 192.168.1.97,端口 8080 上运行 TomCat 的开发机器
在网络驱动程序上:
System.out.println( options.getCapability(CapabilityType.PROXY ) );
返回:
代理(手动,http=192.168.0.97:64181,ssl=192.168.0.97:64181)
我们的网络上没有使用公司代理。
以下是我测试中的代码:
@BeforeClass
public static void setupWebDriver() throws MalformedURLException
{
DesiredCapabilities capabilities = new DesiredCapabilities();
proxy = new BrowserMobProxyServer();
proxy.setMitmManager( ImpersonatingMitmManager.builder().trustAllServers( true ).build() );
proxy.setChainedProxy( new InetSocketAddress( "192.168.1.97", 8080 ) );
proxy.setTrustAllServers( true );
proxy.start( 0 );
// get the Selenium proxy object
Proxy seleniumProxy = ClientUtil.createSeleniumProxy( proxy );
seleniumProxy.setSslProxy( "192.168.1.97:" + proxy.getPort() );
capabilities.setAcceptInsecureCerts( true );
capabilities.setCapability( CapabilityType.ACCEPT_SSL_CERTS, true );
capabilities.setCapability( CapabilityType.PROXY, seleniumProxy );
proxy.setHarCaptureTypes( CaptureType.REQUEST_CONTENT, CaptureType.REQUEST_HEADERS );
SeleniumHelper.startup( capabilities );
}
目前正在发生的事情是,Chrome 正在成功生成,当我将这些功能传递给 Web 驱动程序时,本地 Web 服务器为许多请求返回 404 错误。这些似乎都是外部资源(与直接来自 TomCat 的请求相反),所以我的解决方案非常接近,只是无法让 BrowserMob 连接到第三方 HTTP 和 HTTPS 资源。例如 jQuery 失败、Google Analytics 失败等等。
我已经检查了实际资源中的 HAR 资源,并且代理似乎受到了打击,因为我能够读取 HAR 资源。IE。我从中得到输出:
super.getProxy().newHar("check.har");
goTo( "/507393" );
waitForNavigation();
Har har = super.getHar();
HarLog log = har.getLog();
List<HarEntry> entries = log.getEntries();
for(HarEntry entry: entries ) {
HarRequest request= entry.getRequest();
System.out.println( request.getUrl() );
}
如果我删除链式代理的行,Selenium 根本不会连接到任何 Web 服务器。我怀疑本地设置是否需要链式代理,但我现在使用它比没有它更进一步。
有人能看出有什么不对吗?我假设因为我正在运行“嵌入式”模式我不需要在命令行运行代理?
还有其他值得探索的设置吗?