2017-08-28 81 views
1

我使用Java与硒,我想使用browsermob:我使用相同的代码为不同的浏览器,例如火狐:与JAVA与Selenium browsermob不起作用,浏览器的不同错误

 BrowserMobProxyServer proxyServer = new BrowserMobProxyServer(); 
     proxyServer.start(); 
     proxyServer.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes()); 
     proxyServer.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT); 
     Proxy proxy = ClientUtil.createSeleniumProxy(proxyServer); 
     DesiredCapabilities dccFirefox = DesiredCapabilities.firefox(); 
     dccFirefox.setCapability(CapabilityType.PROXY, proxy); 
     this.driver = new FirefoxDriver(dccFirefox); 

发生在Firefox错误:

org.openqa.selenium.SessionNotCreatedException: InvalidArgumentError: Expected [object Undefined] undefined to be an integer 
Build info: version: '3.5.1', revision: '9c21bb67ef', time: '2017-08-17T15:26:08.955Z' 
System info: host: 'BEN-PLL-ST1-HP', ip: '192.168.1.9', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_141' 
Driver info: driver.version: FirefoxDriver 
remote stacktrace: stack backtrace: 
    0:   0x4bb74f - <no info> 
    1:   0x4bbea9 - <no info> 
    2:   0x43ce8d - <no info> 
    3:   0x44ce14 - <no info> 
    4:   0x44944a - <no info> 
    5:   0x4203e1 - <no info> 
    6:   0x407dc7 - <no info> 
    7:   0x6d95b9 - <no info> 
    8:   0x4173a7 - <no info> 
    9:   0x6d38b3 - <no info> 
    10:   0x775559cd - BaseThreadInitThunk 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$new$0(W3CHandshakeResponse.java:57) 
    at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$getResponseFunction$2(W3CHandshakeResponse.java:104) 
    at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$24(ProtocolHandshake.java:360) 
    at java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) 
    at java.util.Spliterators$ArraySpliterator.tryAdvance(Unknown Source) 
    at java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source) 
    at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source) 
    at java.util.stream.AbstractPipeline.copyInto(Unknown Source) 
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) 
    at java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source) 
    at java.util.stream.AbstractPipeline.evaluate(Unknown Source) 
    at java.util.stream.ReferencePipeline.findFirst(Unknown Source) 
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:363) 
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:137) 
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142) 
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82) 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:641) 
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:254) 
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236) 
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:137) 
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:191) 
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:103) 
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:137) 

开启Chrome normaly,但网页无法打开,在控制台出现错误:

Failed to load resource: net::ERR_EMPTY_RESPONSE 
net::ERR_PROXY_CONNECTION_FAILED 

有人有任何想法,为什么这样的错误发生?

+0

您运行的硒网格测试? – Murthi

+0

不,只有硒黄色的网络驱动器 –

+0

createSeleniumProxy创建的对象用于硒网格。 – Murthi

回答

1

Geckodriver存在一个公开问题,导致此问题。 https://github.com/mozilla/geckodriver/issues/764

您可以使用下面的代码获得解决方法。

编辑-1

由于geckodriver不可信设置已经改变。所以更新的代码,以适应同一

import net.lightbody.bmp.BrowserMobProxyServer; 
import net.lightbody.bmp.client.ClientUtil; 
import net.lightbody.bmp.core.har.Har; 
import net.lightbody.bmp.proxy.CaptureType; 
import org.openqa.selenium.Proxy; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.firefox.FirefoxProfile; 
import org.openqa.selenium.remote.DesiredCapabilities; 

import java.io.File; 
import java.io.IOException; 

/** 
* Created by tarun.lalwani on 5/31/17. 
*/ 
public class TestApp { 


    public static void main(String [] args) { 

     BrowserMobProxyServer proxyServer = new BrowserMobProxyServer(); 
     proxyServer.start(); 
     proxyServer.setHarCaptureTypes(CaptureType.getAllContentCaptureTypes()); 
     proxyServer.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT); 
     Proxy proxy = ClientUtil.createSeleniumProxy(proxyServer); 
     FirefoxProfile profile = new FirefoxProfile(); 
     DesiredCapabilities cap = new DesiredCapabilities(); 
     cap.setAcceptInsecureCerts(true); 
     String host = proxy.getHttpProxy().split(":")[0]; 
     int port = Integer.parseInt(proxy.getHttpProxy().split(":")[1]); 

     profile.setPreference("network.proxy.type", 1); 
     profile.setPreference("network.proxy.http", host); 
     profile.setPreference("network.proxy.http_port", port); 
     profile.setPreference("network.proxy.ssl", host); 
     profile.setPreference("network.proxy.ssl_port", port); 

     profile.setPreference("acceptInsecureCerts", true); 
     cap.setCapability(FirefoxDriver.PROFILE, profile); 
     FirefoxDriver driver = new FirefoxDriver(cap); 

     proxyServer.newHar("mysite"); 

     driver.get("http://google.com"); 

     Har har = proxyServer.getHar(); 
     try { 
      har.writeTo(new File("har.json")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     driver.quit(); 
    } 
} 

的pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>test1</groupId> 
    <artifactId>test2</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <dependencies> 
    <dependency> 
     <groupId>org.seleniumhq.selenium</groupId> 
     <artifactId>selenium-java</artifactId> 
     <version>3.4.0</version> 
    </dependency> 
     <dependency> 
      <groupId>net.lightbody.bmp</groupId> 
      <!-- To use the legacy, Jetty-based implementation, 
       change the artifactId to browsermob-core --> 
      <artifactId>browsermob-core-littleproxy</artifactId> 
      <version>2.1.0-beta-6</version> 
      <scope>test</scope>  </dependency> 
     <dependency> 
      <groupId>net.lightbody.bmp</groupId> 
      <artifactId>browsermob-core-littleproxy</artifactId> 
      <version>2.1.0-beta-5</version> 
     </dependency> 
    </dependencies> 
</project> 
+0

感谢您的帮助,但仍然无法正常工作现在发生https://github.com/SeleniumHQ/selenium/issues/4562错误,即使我将selenium版本降级到3.4.0并将firefox降级到54.0.1。也许是某种方式来运行此代码的铬/ ie/opera或其他库? –

+0

您试过哪个网站?我用FF 54和Selenium 3.4测试上面的代码 –

+0

我也用过这个组合 –