1

現在、Firefox (および Firebug/NetExport プラグイン) で Selenium Webdriver を使用して、ユーザーがページの検索バーを使用した後に送信された HTTP 要求から特定のクエリ文字列パラメーターを取得する回帰テスト シナリオを実行しています。呼び出しが行われた後、NetExport は要求からの .HAR ファイルをローカル フォルダに保存します。実際には、最後のページが読み込まれる直前にトラフィックをキャプチャするコードがあるにもかかわらず、3 つのファイル (テスト中にアクセスしたページごとに 1 つ) が保存されますが、それは別の問題です。

ただし、次のことを行うには、これをもう少し自動化する必要があります。

1) キャプチャした HAR ファイルを読み取り可能な形式にロードする 2) 必要な値を見つける 3) 後で確認するためにその値を記録する

これを行う最初の試みは、HAR ファイルをローカル フォルダーからオンラインの HAR ビューアーにドラッグ アンド ドロップする方法を調査することでした。この特定のページには、HAR ファイルの内容をコピーして貼り付けるか、テキスト ボックスにドラッグ アンド ドロップしてプレビューを生成するためのボックスがあります。これに関するいくつかの異なる質問 (stackoverflow からのもの) を読み、それは不可能であるか、複雑で実用的ではないと判断しました。

「showPreview」設定を入力します。いくつかの異なるサイトでは、次のように説明されています。「 プレビューを表示: エクスポートされたデータのプレビューを表示します。デフォルトでは HAR Viewer が使用されます。extensions.firebug.ne​​texport.viewerURL 設定を参照して ください

これにより、NetExport で HAR ファイルを新しいタブで開くビューアに自動的にキックすることができるという考えが浮かびました...しかし、これがどのように行われるかについての簡単な説明が見つかりません。あるサポート ページでは、profile.setPreference("extensions.firebug.ne​​texport.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();


        }
}

私の文章の壁を読むのに時間を割いてくれた人に、前もって感謝します!

4

1 に答える 1

1

追加の提案やサポートが不足していたため、次の方法で「右折1回ではなく左折3回」という長いアプローチで問題を解決できました。

1) 私のコードでは、オンライン HAR ビューアを開きます。

2) HAR ファイルをフォルダーに保存し、デフォルトの名前を変更したり、エクスポートを必要なものだけに制限したりできません。フォルダーが開かれているデフォルトのピクセルの場所と、3 番目の 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 ファイルが取得され、ボックスにドロップされます。より良い解決策を見つけられたらいいのにと思いますが、この時点では、解決策がまったくないという非常に長く困難な道を歩みます!

于 2015-09-09T16:09:32.373 に答える