也许有人可以帮助我,我现在已经搜索了几个小时但无法找到解决方案,在任何网站/博客/ FAQ /...
我试图通过Selenium和Browsermob代理获取页面的详细时间。但生成的HAR文件始终是空的pageTitle,pageTimings和条目,如:
{"登录" {"版本":" 1.2""创建器" {"名称&#34 ;:" BrowserMob Proxy","版本":" 2.0"},"页面":[{" id&#34 ;:" assertselenium.com"" startedDateTime":" 2014-08-26T15:45:49.134 + 0000""标题&#34 ;: """ pageTimings":{}}],"条目":[]}}
当我看到教程时,它看起来很容易!但不适合我。 我是公司代理人的幕后黑手,也许是导致问题的原因......
我的代码是(修改了一百次......):
import java.io.File;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;
import net.lightbody.bmp.proxy.ProxyServer;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
public class Example {
public static void main(String[] args) throws Exception {
ProxyServer server = new ProxyServer(4444);
HashMap<String, String> options = new HashMap<String, String>();
server.start();
server.setOptions(options);
server.setCaptureHeaders(true);
server.setCaptureContent(true);
Proxy proxy = new Proxy();
// configure it as a desired capability
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.PROXY, proxy);
FirefoxProfile profile = new FirefoxProfile();
profile.setAcceptUntrustedCertificates(true);
profile.setAssumeUntrustedCertificateIssuer(true);
profile.setPreference("network.proxy.http", "[MY_PROXY_HERE]");
profile.setPreference("network.proxy.http_port", 8080);
profile.setPreference("network.proxy.ssl", "[MY_PROXY_HERE]");
profile.setPreference("network.proxy.ssl_port", 8080);
profile.setPreference("network.proxy.type", 1);
profile.setPreference("network.proxy.no_proxies_on", "");
capabilities.setCapability(FirefoxDriver.PROFILE, profile);
// start the browser up
WebDriver driver = new FirefoxDriver(capabilities);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// create a new HAR with the label "apple.com"
server.newHar("assertselenium.com");
// open yahoo.com
driver.get("http://assertselenium.com");
// driver.get("http://assertselenium.com/2012/10/30/transformation-from-manual-tester-to-a-selenium-webdriver-automation-specialist/");
driver.findElement(By.id("searchform"))
.findElement(By.className("field"))
.sendKeys(new String[] { "test selenium!" });
driver.findElement(By.id("searchform"))
.findElement(By.className("submit")).click();
// new PerformanceTiming((JavascriptExecutor) driver, server.getHar());
((JavascriptExecutor) driver)
.executeScript("var performance = window.performance || {};"
+ "var timings = performance.timing || {};"
+ "return timings;");
server.getHar().writeTo(
new File("C:/prj/SeleniumTest/harfiles/har.txt"));
server.stop();
driver.quit();
}
}
(当然[MY_PROXY_HERE]只是不给出真名:))
谢谢!
答案 0 :(得分:2)
仍然没有50个代表回答而不是评论......
只是想知道你在演出时间之后是什么?您可以直接从浏览器实例中检索Navigation Timing API中的数据吗?这会为您提供页面加载performance times的详细分类。如果您的开发团队愿意插入标记,您也可以使用它来捕获嵌入式AJAX调用的时间等。 (这就是我正在做的事情)
获取数据只是一个简单的JavaScript注入。就我而言(Python - &#39;驱动程序&#39;是我的webdriver实例) - driver.execute_script(&#39; return window.performance.timing&#39;)。这将返回一个带有整页加载时序细分的字典对象。
只是问,因为它似乎比乱用代理要简单得多......