我目前正在使用 Selenium Webdriver 和 Firefox(和 Firebug/NetExport 插件)来完成回归测试场景,其中从用户使用页面上的搜索栏后发送的 HTTP 请求中提取特定的查询字符串参数。调用完成后,NetExport 将请求中的 .HAR 文件保存到本地文件夹。实际上,它保存了 3 个文件(测试期间访问的每个页面一个),即使我有代码在最后一页加载之前直接捕获流量……但这是一个不同的问题。
但是,我需要更多地自动化它来执行以下操作:
1) 将捕获的 HAR 文件加载为可读格式 2) 找到所需的值 3) 记录该值以供稍后查看
我第一次尝试这样做是研究如何将 HAR 文件从本地文件夹拖放到在线 HAR 查看器。此特定页面有一个框,用于复制/粘贴 HAR 文件的内容,或将其拖放到文本框中以生成预览。我已经阅读了几个关于这个的不同问题(一些来自stackoverflow),并决定它要么是不可能的,要么会很复杂且不实用。
输入“showPreview”首选项。在几个不同的站点上,它是这样描述的:“显示预览: 显示导出数据的预览。默认使用 HAR 查看器。请参阅 extensions.firebug.ne texport.viewerURL 首选项。 ”
这给了我一个想法,即我可以让 NetExport 自动将 HAR 文件踢到在新选项卡中打开的查看器中……但我找不到任何关于如何发生这种情况的简化说明。一个支持页面给出了使用profile.setPreference("extensions.firebug.netexport.viewerURL", " http://www.softwareishard.com/har/viewer1-1/ "); 但是,我已将该 URL 更新为指向最新的 URL,并加载了此首选项...但无论我做什么,我都无法预览 HAR 文件以显示在新的 Firefox 选项卡或其他任何地方那件事。
我没主意了。我对此很陌生,所以一些人就其他一些相关的问题给出的答案或提示超出了我的理解水平,而且似乎也不适合。
无论如何,这就是我到目前为止所拥有的。请忽略底部注释掉的东西 - 这只是我正在尝试的东西,并且想保留在那里以供我想再次修改它时参考。
package scn01pkg;
import java.io.*;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.*;
import java.lang.InterruptedException;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.firefox.internal.ProfilesIni;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;
public class UsingBMP {
public static void main(String[] args) {
System.out.println(System.getProperty("user.dir"));
// auto-install FireBug and NetExport into Firefox profile
File firebug = new File("firebug-2.0.11-fx.xpi");
File netExport = new File("netExport-0.9b7.xpi");
FirefoxProfile profile = new FirefoxProfile();
try {
profile.addExtension(firebug);
profile.addExtension(netExport);
} catch (IOException e) {
e.printStackTrace();
}
// Setting Firebug preferences
profile.setPreference("extensions.firebug.currentVersion", "2.0.11");
profile.setPreference("extensions.firebug.addonBarOpened", true);
profile.setPreference("extensions.firebug.console.enableSites", true);
profile.setPreference("extensions.firebug.script.enableSites", true);
profile.setPreference("extensions.firebug.net.enableSites", true);
profile.setPreference("extensions.firebug.previousPlacement", 1);
profile.setPreference("extensions.firebug.allPagesActivation", "on");
profile.setPreference("extensions.firebug.onByDefault", true);
profile.setPreference("extensions.firebug.defaultPanelName", "net");
// Setting netExport preferences
profile.setPreference("extensions.firebug.netexport.alwaysEnableAutoExport", true);
// ---profile under this comment is a test---
profile.setPreference("extensions.firebug.netexport.viewerURL", "http://www.softwareishard.com/har/viewer/");
profile.setPreference("extensions.firebug.netexport.autoExportToFile", true);
profile.setPreference("extensions.firebug.netexport.Automation", true);
profile.setPreference("extensions.firebug.netexport.showPreview", true);
profile.setPreference("extensions.firebug.netexport.defaultLogDir", "C:\\workspace\\CaptureNetworkTraffic");
// Launch Firefox with the desired capabilities
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setBrowserName("firefox");
capabilities.setPlatform(org.openqa.selenium.Platform.ANY);
capabilities.setCapability(FirefoxDriver.PROFILE, profile);
WebDriver driver = new FirefoxDriver(capabilities);
// Wait until Firebug is loaded - 5s
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
// Load tested website mainpage
driver.get("http://www.website.com");
// Wait for page to load (10s)
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// Clicking "Login" from the main page
driver.findElement(By.cssSelector("#login-block a")).click();
// Wait until tested website's login page is loaded - 10s
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// Enter username
driver.findElement(By.id("username")).sendKeys("myusername");
// Waiting after entering in Username, 5s (increase if script failing persists)
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
// Enter password
driver.findElement(By.id("password")).sendKeys("mypassword");
// Clicking "Sign in" after entering UN and PW
driver.findElement(By.name("loginbutton")).click();
// Waiting for page to load - implicitly wait 10s
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// Capture traffic
try {
//arbitrary wait time to avoid "issues"
Thread.sleep(3000);
//searching for product
driver.findElement(By.id("parts")).sendKeys("searchterm");
driver.findElement(By.cssSelector("#keyword-button-div button")).click();
//Time to process request, print to file, and quit.
Thread.sleep(6000);
} catch(InterruptedException ie) {
ie.printStackTrace();
}
// ------Last bit commented out until proper use is determined--------
// Extra wait time - uncomment out if needed
//driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
// Load the HAR viewer website
//driver.get("http://www.softwareishard.com/har/viewer/");
// Wait for page to load
//driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
// Upload file to the online HAR viewer
//WebElement inputField = driver.findElement(By.xpath("//*[@id=sourceEditor]"));
//WebElement inputField = driver.findElement(By.id("sourceEditor"));
//inputField.sendKeys("C:\\workspace\\CaptureNetworkTraffic\\www.freescale.com+2015-08-24+11-23-46.har");
// Wait 2 seconds
//driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
// Submit the data
// driver.findElement(By.name("appendPreview")).click();
// Wait for page to load
// driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
// ---------uncomment out when script is working to this point--------------
// driver.quit();
}
}
提前感谢任何花时间阅读我的文字墙的人!