TDD для plupload с Django/Splinter

Я пытаюсь настроить тесты для загрузки с помощью виджета очереди plupload. Я использую Splinter для тестирования в браузере, но не могу найти способ сделать это. В Splinter есть несколько способов прикрепления файлов, но только если это просто поле файла. Другой способ - нажать кнопку, чтобы просмотреть файлы, и выбрать файл ... но я не думаю, что это возможно с помощью Splinter (или селена), не так ли? Или с помощью перетаскивания файлов.

Кто-нибудь может предложить лучший способ автоматизировать эти тесты?


person dfranca    schedule 20.03.2013    source источник


Ответы (2)


Можно автоматизировать действия пользователя, выполняемые при управлении PLUpload, с помощью Selenium-WebDriver. Пожалуйста, найдите приведенный ниже код 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}");
         }
    }
}
person CheryJose    schedule 22.03.2013

У меня была аналогичная проблема с виджетом 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);

нажмите Ввод

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

Окно PlUpload закроется, поэтому мы вернемся в окно браузера (в данном случае Firefox).

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

С этим возникает несколько проблем, поскольку заголовки окон различаются в зависимости от используемого браузера, поэтому это необходимо учитывать для полного решения. Кроме того, когда выполняется этот раздел кода, не выводите другие окна на передний план, так как это окно получит «SendKeys», а не требуемое окно.

person Gazen Ganados    schedule 29.07.2014