Как правильно использовать опцию "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 и поместит его в поле. Хотелось бы найти лучшее решение, но на этом этапе я пройду чрезвычайно долгий и трудный путь, а не решение вообще!

Другие вопросы по тегам