Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有一种方法可以使用带Selenium的BrowserStack捕获网络?_Java_Selenium Webdriver_Browserstack_Browsermob - Fatal编程技术网

Java 有没有一种方法可以使用带Selenium的BrowserStack捕获网络?

Java 有没有一种方法可以使用带Selenium的BrowserStack捕获网络?,java,selenium-webdriver,browserstack,browsermob,Java,Selenium Webdriver,Browserstack,Browsermob,我使用SeleniumWebDriver在不同类型的设备和浏览器上运行测试。所以实际上测试是由RemoteWebDriver运行的。 我知道可以使用在Selenium测试中捕获网络,但据我所知,只有当测试在本地机器上运行时,它才能工作。 在BrowserStack这样的跨平台基础上运行测试时,是否有一种捕获网络的方法? 更新 我设法在har文件中(从“localhost:8080/proxy/8081/har”链接)捕获网络,使用独立的BrowserMobProxy和独立的本地Browser

我使用SeleniumWebDriver在不同类型的设备和浏览器上运行测试。所以实际上测试是由RemoteWebDriver运行的。 我知道可以使用在Selenium测试中捕获网络,但据我所知,只有当测试在本地机器上运行时,它才能工作。
在BrowserStack这样的跨平台基础上运行测试时,是否有一种捕获网络的方法?

更新
我设法在har文件中(从“localhost:8080/proxy/8081/har”链接)捕获网络,使用独立的BrowserMobProxy和独立的本地BrowserStack,正如我所建议的那样

我尝试从代码中自动执行相同的操作:

    BrowserMobProxy proxy = new BrowserMobProxyServer();
    proxy.start(8080);
    System.out.println("Proxy port: " + port);
    System.setProperty("java.net.useSystemProxies", "true");
    System.setProperty("http.proxyHost", "127.0.0.1");
    System.setProperty("http.proxyPort", "8080");
    System.setProperty("https.proxyHost", "127.0.0.1");
    System.setProperty("https.proxyPort", "8080");

    Local l = new Local();
        Map<String, String> options = new HashMap<String, String>();
        options.put("key", accessKey);
        options.put("forcelocal", "true");`

    //when I uncomment it i get an exception: 
    //com.browserstack.local.LocalException: Could not connect to www.browserstack.com! 

    //            options.put("forceproxy", "true");
    //            options.put("proxyHost", "localhost");
    //            options.put("proxyPort", "8080");
        l.start(options);
    }
    Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
    capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
    proxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
    driver = new RemoteWebDriver(new URL("http://"+username+":"+accessKey+"@"+config.get("server")+"/wd/hub"), capabilities);'

    proxy.newHar("testHar.com");

    driver.get(testUrl);
    Thread.sleep(15000);
    Har har = proxy.getHar();
    FileOutputStream fos = new FileOutputStream("C:\\LoadingPage\\network\\testHar.har");
    har.writeTo(fos);
BrowserMobProxy代理=新建BrowserMobProxyServer();
代理启动(8080);
System.out.println(“代理端口:”+端口);
setProperty(“java.net.useSystemProxies”,“true”);
set属性(“http.proxyHost”、“127.0.0.1”);
setProperty(“http.proxyPort”、“8080”);
System.setProperty(“https.proxyHost”、“127.0.0.1”);
System.setProperty(“https.proxyPort”、“8080”);
局部l=新的局部();
Map options=newhashmap();
期权。看跌期权(“key”,accessKey);
期权。看跌期权(“强制本地”、“真实”)`
//当我取消注释它时,我得到一个异常:
//com.browserstack.local.LocalException:无法连接到www.browserstack.com!
//期权出售(“强制代理”、“真实”);
//期权。看跌期权(“proxyHost”、“localhost”);
//期权。看跌期权(“proxyPort”、“8080”);
l、 启动(选项);
}
代理seleniumProxy=ClientUtil.createSeleniumProxy(代理);
能力.setCapability(CapabilityType.PROXY,seleniumProxy);
proxy.enableHarCaptureTypes(CaptureType.REQUEST\u内容、CaptureType.RESPONSE\u内容);
driver=新的RemoteWebDriver(新的URL(“http://“+username+”:“+accessKey+”@“+config.get(“server”)+”/wd/hub”)功能)
proxy.newHar(“testHar.com”);
get(testUrl);
睡眠(15000);
Har=proxy.getHar();
FileOutputStream fos=新的FileOutputStream(“C:\\LoadingPage\\network\\testHar.har”);
har.writeTo(fos);
与url的连接正在工作,我可以看到它并发出屏幕喊叫。 但是在har文件中,我只看到对“hub cloud.browserstack.com/wd/hub/…”的请求,而不是来自页面本身的请求

如何从代码中获取正确的har?
代码中有什么不正确?

我看到了两种解决此问题的方法

  • BrowserMobProxy-有两种方法可以运行它:1。从您的代码(添加库)2。独立代理(由RESTAPI控制)。在这两种情况下,您都需要向webdriver提供代理并控制您的代理。这里需要了解的另一件重要的事情是,您需要通过代理所在的机器重定向来自browsermob的所有流量,请参阅有关browserstack本地执行的文章。据我所知,这个问题描述了在一台机器上创建代理而browserstack根本无法访问它的情况。 使用browsermob,您可以获得所有必需的信息:如请求、参数、响应代码、响应时间等,甚至可以等待请求完成

  • 检查性能日志。ChromeDriver有一个捕获选项。此选项更简单,因为您不需要关心代理。然而,这种方法也有一定的局限性:您将无法获得请求统计信息,如响应时间和响应代码,以及可能需要的其他信息。它只允许您获取基本信息,如:请求类型、请求url,当然您还可以从url解析参数


  • 我认为这个问题有两种解决方案

  • BrowserMobProxy-有两种方法可以运行它:1。从您的代码(添加库)2。独立代理(由RESTAPI控制)。在这两种情况下,您都需要向webdriver提供代理并控制您的代理。这里需要了解的另一件重要的事情是,您需要通过代理所在的机器重定向来自browsermob的所有流量,请参阅有关browserstack本地执行的文章。据我所知,这个问题描述了在一台机器上创建代理而browserstack根本无法访问它的情况。 使用browsermob,您可以获得所有必需的信息:如请求、参数、响应代码、响应时间等,甚至可以等待请求完成

  • 检查性能日志。ChromeDriver有一个捕获选项。此选项更简单,因为您不需要关心代理。然而,这种方法也有一定的局限性:您将无法获得请求统计信息,如响应时间和响应代码,以及可能需要的其他信息。它只允许您获取基本信息,如:请求类型、请求url,当然您还可以从url解析参数


  • 根据我的经验,我想对BrowserStack链接(由Mikhail共享)中给出的二进制命令进行一些修改。doc中给出的cmd应该适用于私有URL,但可能不适用于公共URL。


    • 独立二进制文件的步骤:
    1-从“”下载BrowserStackLocal二进制文件

    通过运行以下命令启动二进制文件,使您的代理能够监视流量

    -BrowserStackLocal.exe--密钥 --本地代理主机--本地代理端口--本地代理用户--本地代理传递--强制代理--强制本地

    有关所有修饰符的详细信息,请访问“”

    2-在测试脚本中包含“browserstack.local”功能

    “browserstack.local”=真



    • Java(BrowserStack本地)绑定的步骤:
    1-遵循使用本地绑定的步骤

    2-使用您可以使用最新版本的二进制文件中提供的更新选项。例如,如果您希望
    bsLocalArgs.put("-local-proxy-host", "Your BrowserMob proxy IP");
    
    bsLocalArgs.put("-local-proxy-port", "Your BrowserMob proxy Port");
    
    bsLocalArgs.put("-local-proxy-user", "Your BrowserMob proxy Username");
    
    bsLocalArgs.put("-local-proxy-pass", "Your BrowserMob proxy Password");