Selenium webdriver 无法使用java捕获BrowserStack local、BrowserMobProxy嵌入式模式和Selenium 3.x的浏览器网络日志

Selenium webdriver 无法使用java捕获BrowserStack local、BrowserMobProxy嵌入式模式和Selenium 3.x的浏览器网络日志,selenium-webdriver,http-proxy,browserstack,remotewebdriver,browsermob-proxy,Selenium Webdriver,Http Proxy,Browserstack,Remotewebdriver,Browsermob Proxy,下面是我的maven pom.xml中的依赖项 <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-server</artifactId> <version>3.14.0</version> <groupId>net.lightbody.bmp</groupId> <artifactId>[brows

下面是我的maven pom.xml中的依赖项

<groupId>org.seleniumhq.selenium</groupId>  
<artifactId>selenium-server</artifactId>  
<version>3.14.0</version>

<groupId>net.lightbody.bmp</groupId>  
<artifactId>[browsermob-core][1]</artifactId>  
<version>2.1.5</version>

<groupId>com.browserstack</groupId>  
<artifactId>[browserstack-local-java][1]</artifactId>  
<version>1.0.3</version>
变量httpProxyHost和httpProxyPort是corporateProxy IP和端口

下面是启动BrowserStack local的代码

    private static void browserStackLocalStart() {
        bsLocal = new Local();
        bsLocalArgs = new HashMap<>();
        bsLocalArgs.put("key", AUTOMATE_ACCESS_KEY);

        // BrowserStack local executable.
        bsLocalArgs.put("binarypath", format(BROWSERSTACK_PATH, "/src/test/resources/BrowserStackLocal"));

        // Force to use local and Corp proxy.
        bsLocalArgs.put("forcelocal", "true");
        bsLocalArgs.put("forceproxy", "true");

        // Set Corp Proxy and user crendentials.
        bsLocalArgs.put("proxyHost", httpProxyHost);
        bsLocalArgs.put("proxyPort", httpProxyPort);
        bsLocalArgs.put("proxyUser", System.getProperty("proxy.user"));
        bsLocalArgs.put("proxyPass", System.getProperty("proxy.password"));

        // Set local Proxy to BrowserMobProxy host - localhost ip and port and set user credentials.
        bsLocalArgs.put("localProxyHost", localHostAddress);
        bsLocalArgs.put("localProxyPort", localHostPort);
        bsLocalArgs.put("-localProxyUser", System.getProperty("proxy.user"));
        bsLocalArgs.put("-localProxyPass", System.getProperty("proxy.password"));
        seleniumProxy = ClientUtil.createSeleniumProxy(proxy);

        try {
            if(bsLocal.isRunning()) bsLocal.stop(bsLocalArgs);
            bsLocal.start(bsLocalArgs);
            log.info(format("Browser Stack Local status: %s", bsLocal.isRunning()));
        } catch (Exception e) {
            log.warning("!!! Cannot start browserstack local !!!");
        }
    }
private static void browserStackLocalStart(){
bsLocal=新本地();
bsLocalArgs=newhashmap();
bsLocalArgs.put(“键”,自动访问键);
//BrowserStack本地可执行文件。
put(“二进制路径”,格式为(BROWSERSTACK_PATH,“/src/test/resources/BrowserStackLocal”);
//强制使用本地和公司代理。
bsLocalArgs.put(“forcelocal”、“true”);
bsLocalArgs.put(“forceproxy”、“true”);
//设置公司代理和用户凭据。
bsLocalArgs.put(“proxyHost”,httpProxyHost);
bsLocalArgs.put(“proxyPort”,httpProxyPort);
bsLocalArgs.put(“proxyUser”,System.getProperty(“proxy.user”);
bsLocalArgs.put(“proxyPass”,System.getProperty(“proxy.password”);
//将本地代理设置为BrowserMobProxy主机-本地主机ip和端口,并设置用户凭据。
bsLocalArgs.put(“localProxyHost”,localHostAddress);
bsLocalArgs.put(“localProxyPort”,localHostPort);
bsLocalArgs.put(“-localProxyUser”,System.getProperty(“proxy.user”));
bsLocalArgs.put(“-localProxyPass”,System.getProperty(“proxy.password”));
seleniumProxy=ClientUtil.createSeleniumProxy(代理);
试一试{
if(bsLocal.isRunning())bsLocal.stop(bsLocalArgs);
bsLocal.start(bsLocalArgs);
log.info(格式(“浏览器堆栈本地状态:%s”,bsLocal.isRunning());
}捕获(例外e){
日志。警告(!!!无法启动browserstack local!!!);
}
}
下面是在BrowserStack上启动驱动程序的方法

private static void setDriverWithBrowserstackOptions() {
        // Start BrowserMob proxy and browserstack-local.
        browserMobSeleniumProxyStart();
        browserStackLocalStart();

        String jobName = System.getenv("JOB_BASE_NAME");

        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("browserstack.local", "true");
        caps.setCapability("browserstack.selenium_version", "3.14.0");
        caps.setCapability("browserstack.debug","true");
        caps.setCapability("browserstack.networkLogs","false");
        caps.setCapability("acceptSslCerts", "true");
        caps.setCapability("name", testName);
        caps.setCapability("project", "SampleProj");
        caps.setCapability("sessionName", "sessionName1");
        caps.setCapability("localIdentifier", "Local Test");
        caps.setCapability("build", "Local");
        caps.setCapability("browserstack.maskCommands", "setValues, getValues, setCookies, getCookies");
        caps.setCapability(CapabilityType.PROXY, seleniumProxy);

        // Chrome Options.
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--ignore-certificate-errors");
        caps.merge(ChromeOptions.CAPABILITY, options);
        URL url = null;
        try {
            url = new URL(URL);
        } catch (MalformedURLException e) {
            log.warning("Browserstack URL may be incorrect."+ URL);
        }

        // Initiate RemoteWebDriver instanc
        WebDriver d = new RemoteWebDriver(url, caps);

        // Create new HAR.
        proxy.newHar();

        try {
            d.get("https://google.com");
            Thread.sleep(10000);

           // Fetch Har entries.
            List<HarEntry> harEntries = proxy.getHar().getLog().getEntries();
            for (HarEntry h : harEntries) {
                System.out.println("---------------- HAR Request -----------------");
                System.out.println(h.getRequest());
                System.out.println("----------------------------------------------");
                System.out.println("---------------- HAR Response -----------------");
                System.out.println(h.getResponse());
                System.out.println("----------------------------------------------");
            }
        } catch (Exception e) {
            e.printStackTrace();

        }
    }
private static void setDriverWithBrowserstackOptions(){
//启动BrowserMob代理和browserstack local。
browserMobSeleniumProxyStart();
browserStackLocalStart();
字符串jobName=System.getenv(“JOB_BASE_NAME”);
DesiredCapabilities=新DesiredCapabilities();
caps.setCapability(“browserstack.local”、“true”);
caps.setCapability(“browserstack.selenium_版本”、“3.14.0”);
setCapability(“browserstack.debug”、“true”);
caps.setCapability(“browserstack.networkLogs”、“false”);
caps.setCapability(“acceptSslCerts”、“true”);
caps.setCapability(“名称”,testName);
caps.setCapability(“项目”、“样本项目”);
caps.setCapability(“sessionName”、“sessionName1”);
caps.setCapability(“本地标识符”、“本地测试”);
caps.setCapability(“构建”、“本地”);
caps.setCapability(“browserstack.maskCommand”、“setValues、getValues、setCookies、getCookies”);
caps.setCapability(CapabilityType.PROXY,seleniumProxy);
//Chrome选项。
ChromeOptions选项=新的ChromeOptions();
options.addArguments(“--ignore certificate errors”);
caps.merge(ChromeOptions.CAPABILITY,options);
URL=null;
试一试{
url=新url(url);
}捕获(格式错误){
警告(“浏览器堆栈URL可能不正确。”+URL);
}
//启动RemoteWebDriver实例
WebDriver d=新的RemoteWebDriver(url,大写);
//创建新的HAR。
proxy.newHar();
试一试{
d、 得到(”https://google.com");
睡眠(10000);
//获取Har条目。
List harEntries=proxy.getHar().getLog().getEntries();
for(HarEntry h:harEntries){
System.out.println(“--------------HAR请求----------------”);
System.out.println(h.getRequest());
System.out.println(“-------------------------------------------------------------”;
System.out.println(“--------------HAR响应----------------”);
System.out.println(h.getResponse());
System.out.println(“-------------------------------------------------------------”;
}
}捕获(例外e){
e、 printStackTrace();
}
}
我尝试了使用和不使用BrowserMobProxy setChainedProxy,但没有成功捕获HAR条目


非常感谢您的任何想法和评论。

您只需设置以下功能即可在BrowserStack上捕获网络日志:

caps.setCapability("browserstack.networkLogs","true");

此外,您还可以捕获使用browserstack.networkLogsOptions发出的请求的内容。更多关于

的细节没有帮助!在某个地方的browserstack local文档中,我读到当依赖本地代理和browserstack local时,browserstack.networkLogs不应设置为true,因此我将其设置为显式false。
caps.setCapability("browserstack.networkLogs","true");