也许有人可以帮助我,我已经搜索了几个小时了,找不到解决方案,在任何网站/博客/常见问题/…
我试图得到一个页面的详细时间,与硒和Browsermob代理。但是生成的HAR文件总是空的pageTitle, pageTimings和条目,如:
{"日志":{"版本":"1.2","创造者":{"名称":"BrowserMob代理"、"版本":"2.0"},"页面":[{" id ": " assertselenium.com "、"startedDateTime":"2014 - 08 - 26 - t15:45:49.134 + 0000","标题":","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]只是不给真名:))
仍然没有50个代表所以回答而不是评论....
只是想知道你想从性能计时中得到什么?因为你可以从导航计时API直接从浏览器实例检索数据?这将为您提供页面加载性能时间的详细细分。如果您的开发团队愿意插入标记,您还可以使用它来捕获嵌入式AJAX调用等的计时。(这就是我正在做的)
获取数据只是一个简单的JavaScript注入。在我的情况下(Python - 'driver'是我的webdriver实例)-驱动程序。execute_script("返回window.performance.timing")。它返回一个字典对象,其中包含完整的页面加载时间分解。
只是问一下,因为这似乎比搞乱代理简单得多…