我目前正在尝试使用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资源。即。我从这里得到输出:
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服务器。我怀疑本地设置是否不需要链接代理,但是与之相比,与之相比,我有了更进一步的了解。
谁能看到任何错误?我假设是因为我正在运行“嵌入式”模式,所以我不需要在命令行上运行代理吗?
还有其他值得探索的设置吗?