Как правильно использовать опцию "showPreview" NetExport в автоматическом скрипте? (Webdriver с Firebug & NetExport)
В настоящее время я использую Selenium Webdriver с Firefox (и плагинами Firebug/NetExport) для выполнения сценария регрессионного тестирования, в котором конкретный параметр строки запроса извлекается из запроса HTTP, отправляемого после того, как пользователь использует панель поиска на странице. После выполнения вызова NetExport сохраняет файлы.HAR из запроса в локальную папку. На самом деле, он сохраняет 3 файла (по одному на каждую страницу, просмотренную во время теста), хотя у меня есть код для захвата трафика непосредственно перед последней загрузкой страницы... но это другая проблема.
Однако мне нужно немного больше автоматизировать, чтобы сделать следующее:
1) Загрузите захваченный файл HAR в читаемый формат 2) Найдите необходимое значение 3) Запишите это значение для последующего просмотра
Моя первая попытка сделать это состояла в том, чтобы исследовать, как перетаскивать файл HAR из локальной папки в онлайн-средство просмотра HAR. Эта конкретная страница имеет поле для копирования / вставки содержимого файла HAR или перетаскивания его в текстовое поле для создания предварительного просмотра. Я прочитал несколько разных вопросов об этом (некоторые из stackru) и решил, что это либо невозможно, либо будет сложным и непрактичным.
Введите предпочтение "showPreview". На нескольких разных сайтах это описывается так: "Показать предварительный просмотр: Показать предварительный просмотр экспортированных данных. По умолчанию используется средство просмотра HAR. См. Параметр extensions.firebug.netexport.viewerURL".
Это натолкнуло меня на мысль, что я могу просто настроить NetExport на автоматическое добавление файла HAR в средство просмотра, открывающееся на новой вкладке... но я не могу найти никаких упрощенных инструкций о том, как это должно происходить. Одна страница поддержки дала ответ на использование profile.setPreference ("extensions.firebug.netexport.viewerURL", " http://www.softwareishard.com/har/viewer1-1/"); однако я обновил этот 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();
}
}
Заранее спасибо всем, кто нашел время, чтобы прочитать мою стену текста!
1 ответ
Не имея каких-либо дополнительных предложений или поддержки, мне удалось решить мою проблему с длительным подходом "3 левых поворота вместо 1 правого поворота" следующим образом:
1) В моем коде откройте онлайн-просмотрщик HAR.
2) Сохраняя файлы HAR в папке и будучи не в состоянии изменить имя по умолчанию или ограничить экспорт только тем, который я хочу, я отмечаю расположение пикселей по умолчанию, в котором открывается папка, и расположение пикселей по умолчанию файла THIRD HAR в список.
2) Используйте очень короткий сценарий AutoIt, чтобы открыть папку хранилища экспорта HAR, которая по умолчанию частично перекрывает себя в окне онлайн-просмотра HAR (где можно вручную удалить файл), затем сценарий вручную перетаскивает третью HAR файл в списке для выпадающего списка.
Код AutoIT для перетаскивания выглядит следующим образом:
;~ --------------------------------------------------------------------------------------------
;~ ACTIONS - Open the folder location that contains the HAR files, then waits for Windows to process the action.
;~ Folder will open on top of the web page loaded before, which will leave the box area open
;~ to drag and drop the file
;~ --------------------------------------------------------------------------------------------
Run("C:\WINDOWS\EXPLORER.EXE /n,/e,C:\AutoIT\EXE\STORAGE\FOLDER")
Sleep(5000)
;~ --------------------------------------------------------------------------------------------
;~ ACTIONS - Go to pixel location of the THIRD HAR file in the list, then click and drag it to the pixel location
;~ located within the drop box area of the webpage
;~---------------------------------------------------------------------------------------------
MouseClickDrag("left", -716, 292, 280, 261)
Сценарий AutoIt должен быть скомпилирован в.exe, а затем использовать следующий код для его вызова
try {
Runtime r = Runtime.getRuntime();
Process p2 = r.exec("C:\\Default\\HAR\\STORAGE\\FOLDER\\LOCACTION\\MyAutoItScript.Exe");
} catch(IOException ex) {
System.out.println(ex.getMessage());
}
Пока папка еще не открыта, а все ранее экспортированные файлы HAR находятся в папке хранилища, она найдет правильный файл HAR и поместит его в поле. Хотелось бы найти лучшее решение, но на этом этапе я пройду чрезвычайно долгий и трудный путь, а не решение вообще!