Selenium webdriver 无法使用java捕获BrowserStack local、BrowserMobProxy嵌入式模式和Selenium 3.x的浏览器网络日志
下面是我的maven pom.xml中的依赖项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
<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");