2

Pluploadキュー ウィジェットを使用してアップロードのテストを設定しようとしています。ブラウザー内テストにSplinterを使用していますが、それを実現する方法が見つかりませんでした。Splinter にはファイルを添付する方法がいくつかありますが、単純なファイル フィールドの場合のみです。別の方法は、ボタンをクリックしてファイルを参照し、ファイルを選択することです...しかし、Splinter (またはセレン) を使用してそれが可能だとは思いませんか? または、ファイルのドラッグ アンド ドロップを使用します。

論文のテストを自動化するための最良の方法について何か提案はありますか?

4

2 に答える 2

1

Selenium-WebDriver を使用して、PLUpload コントロールで実行されるユーザー アクションを自動化することができます。以下の WebDriver C# コードを見つけてください。これは、フラッシュ ボタン オブジェクトをクリックし、キーボード イベントを使用してファイルを選択します。

using System;
using System.Windows.Forms;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium;
using OpenQA.Selenium.Support;
using OpenQA.Selenium.Interactions;
using NUnit.Framework;
namespace BusinessCreation
{
    class PlUpload
    {
        static void Main(string[] args)
        {
               IWebDriver driver = new FirefoxDriver();
               driver.Navigate().GoToUrl("http://www.plupload.com/example_queuewidget.php");
               driver.FindElement(By.XPath("//object[@data='/plupload/js/plupload.flash.swf']")).Click();
               SendKeys.SendWait(@"C:\Users\Public\Pictures\Sample Pictures\Dock.jpg");
               SendKeys.SendWait(@"{Enter}");
         }
    }
}
于 2013-03-22T13:12:49.130 に答える
0

PlUpload ウィジェットでも同様の問題がありました。私を正しい軌道に乗せてくれた CheryJose に感謝します。

まず、開いているウィンドウを見つけてウィンドウの辞書として返す小さなクラスを作成する必要がありました。

public static IDictionary<string, IntPtr> GetOpenWindows()
{
    IntPtr lShellWindow = GetShellWindow();
    Dictionary<string, IntPtr> lWindows = new Dictionary<string, IntPtr>();
    EnumWindows(delegate(IntPtr hWnd, int lParam)
    {
        if (hWnd == lShellWindow) return true;
        if (!IsWindowVisible(hWnd)) return true;
        int lLength = GetWindowTextLength(hWnd);
        if (lLength == 0) return true;

        StringBuilder lBuilder = new StringBuilder(lLength);
        GetWindowText(hWnd, lBuilder, lLength + 1);
        lWindows[lBuilder.ToString()] = hWnd;
        return true;
    }, 0);

    return lWindows;
}

public delegate bool EnumDelegate(IntPtr hWnd, int lParam);
public delegate bool EnumedWindow(IntPtr handleWindow, ArrayList handles);

[DllImport("USER32.DLL")]
public static extern bool EnumWindows(EnumDelegate enumFunc, int lParam);

[DllImport("USER32.DLL")]
public static extern IntPtr GetShellWindow();

[DllImport("USER32.DLL")]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);

[DllImport("USER32.DLL")]
public static extern int GetWindowTextLength(IntPtr hWnd);

[DllImport("USER32.DLL")]
public static extern bool IsWindowVisible(IntPtr hWnd);

[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);

Selenium ページ コードで、ボタンをクリックして PlUpload ウィンドウを起動し、少し待ちます。(これはコードには示されていません)

次に、以下のコードを使用して、開いているすべてのウィンドウを見つけます

IDictionary<string, IntPtr> getOpenWindows = GetOpenWindows();

PlUpload ウィンドウに切り替えます (ウィンドウの名前はブラウザーによって異なります。注意してください!)

IntPtr hWnd = getOpenWindows["File Upload"];
SetForegroundWindow(hWnd);

ファイルのパスを入力します

SendKeys.SendWait(filename);

Enterキーを押します

SendKeys.SendWait(@"{Enter}");

PlUpload ウィンドウが閉じるので、ブラウザ ウィンドウ (この場合は Firefox) に戻ります。

hWnd = getOpenWindows["Mozilla Firefox"];
SetForegroundWindow(hWnd);

使用しているブラウザーによってウィンドウのタイトルが異なるため、これにはいくつかの問題があります。完全な解決策を得るには、これを考慮する必要があります。さらに、コードのこのセクションが実行されているときは、他のウィンドウを前面に表示しないでください。このウィンドウは、必要なウィンドウではなく「SendKeys」を受け取るためです。

于 2014-07-29T10:09:22.237 に答える