luk*_*sch 5 java selenium webdriver page-load-time selenium-webdriver
问题:
是否可以告诉由selenium webdriver控制的浏览器不从外部源加载任何内容,或者不从给定的域列表中加载资源?
底色:
我有一个网页,我用selenium webdriver编写一个基于java的测试脚本 - 我无法更改页面,我只需编写测试.网站从其他域加载的某些外部内容存在问题.外部的东西是我的测试实际上不需要的一些javascript代码,但是有问题的页面包括.现在问题.有时外部源是超级慢的,阻止webdriver在给定的页面加载超时(20秒)内加载页面.我的测试实际上运行正常,因为页面实际上是加载的 - 所有html都在那里,所有内部脚本都被加载并且可以工作.
随便想一想:
有不同浏览器的扩展可以做我要求的,但我需要运行我的测试与几个浏览器,即chrome,firefox和phantomjs.而且没有像phantomjs扩展这样的东西.如果可能的话,我需要一个纯粹基于webdriver技术的解决方案.不过,我愿意为每个浏览器编写一个单独的解决方案.
我很感激有关如何解决这个问题的任何想法.
解决方案是使用代理.Webdriver与browsermob代理集成得非常好:http://bmp.lightbody.net/
private WebDriver initializeDriver() throws Exception {
// Start the server and get the selenium proxy object
ProxyServer server = new ProxyServer(proxy_port); // package net.lightbody.bmp.proxy
server.start();
server.setCaptureHeaders(true);
// Blacklist google analytics
server.blacklistRequests("https?://.*\\.google-analytics\\.com/.*", 410);
// Or whitelist what you need
server.whitelistRequests("https?://*.*.yoursite.com/.*. https://*.*.someOtherYourSite.*".split(","), 200);
Proxy proxy = server.seleniumProxy(); // Proxy is package org.openqa.selenium.Proxy
// configure it as a desired capability
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.PROXY, proxy);
// start the driver ;
Webdriver driver = new FirefoxDriver(capabilities);
return driver;
}
Run Code Online (Sandbox Code Playgroud)
编辑:人们经常要求提供http状态代码,您可以使用代理轻松地检索它们.代码可以是这样的:
// create a new har with given label
public void setHar(String label) {
server.newHar(label);
}
public void getHar() throws IOException {
// FIXME : What should be done with the this data?
Har har = server.getHar();
if (har == null) return;
File harFile = new File("C:\\localdev\\bla.har");
har.writeTo(harFile);
for (HarEntry entry : har.getLog().getEntries()) {
// Check for any 4XX and 5XX HTTP status codes
if ((String.valueOf(entry.getResponse().getStatus()).startsWith("4"))
|| (String.valueOf(entry.getResponse().getStatus()).startsWith("5"))) {
log.warn(String.format("%s %d %s", entry.getRequest().getUrl(), entry.getResponse().getStatus(),
entry.getResponse().getStatusText()));
//throw new UnsupportedOperationException("Not implemented");
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4757 次 |
| 最近记录: |