FileUpload watin - PullRequest
       7

FileUpload watin

1 голос
/ 03 июня 2011

Мне нужно загрузить файл на веб-сайт, используя watin.Проблема в том, что установка направления файла, например:

browser.FileUpload(Find.ById("ctl00_cpContent_FileUpload1")).Set(DIRECCION_XML + "plantilla.txt");

, не работает.Из-за этого мне нужно обработать всплывающие окна и указать направление файла для загрузки.Я не знаю, как это сделать ... Я искал информацию о FileUploadHandler, но я не могу ее получить.

Есть еще вариант?Пожалуйста, помогите мне с возможным кодом, чтобы сделать это.

Действительно, спасибо

Ответы [ 2 ]

1 голос
/ 17 сентября 2015

FileUploadHandler прекрасно работает.У меня он работает в производственном режиме с тысячами загружаемых файлов каждый день, и у меня до сих пор не было проблем с ним.

Это способ, которым он должен быть реализован:

РЕДАКТИРОВАТЬ: (Я забыл включить объект uploadDialog)

IntPtr hwndTmp = (IntPtr)FindWindow("#32770","Select file(s) to upload"); // or whatever the window text says when you are opening that upload window)
Window uploadDialog = new Window(hwndTmp);

UploadFileDialogHandler uploadFile = new UploadFileDialogHandler(_toBeSent.FileToSent);
_browser.AddDialogHandler(uploadFile);
uploadFile.HandleDialog(uploadDialog);
uploadFile = null;

Это позаботится о процессе загрузки.когда вам нужно загрузить файл, обо всех этих строках позаботятся обо всем (переберите все открытые диалоговые окна, найдите правильное, найдите текстовое поле, введите имя и нажмите кнопку «ОК». Вдобавок к этому вам нужносоздайте другой класс, который будет UploadFileDialogHandler:

public class UploadFileDialogHandler : BaseDialogHandler
    {
        private const int WmSettext = 0x000C;

        private string fileName;
        private bool _processed = false;
        public override bool HandleDialog(Window window)
        {
            var button = GetOpenButton(window);
            if (button != null)
            {
                if (_processed == false)
                {
                    var fileNameHandle = NativeMethods.GetChildWindowHwnd(window.Hwnd, "Edit");
                    var fileNameHwnd = new Hwnd(fileNameHandle);
                    fileNameHwnd.SetFocus();

                    _processed = true;
                    //MessageBox.Show("About to send " + fileName);

                    fileNameHwnd.SendString(fileName);

                    button.Click();
                }
                return true;
            }
            else
            {
                return false;
            }
        }

        public UploadFileDialogHandler(string file)
        {
            fileName = "";
            fileName = file;
            //MessageBox.Show("Setting filename: " + fileName);
        }

        public override bool CanHandleDialog(Window window)
        {
            return GetOpenButton(window) != null;
        }

        private WinButton GetOpenButton(Window window)
        {
            var windowButton = new WindowsEnumerator().GetChildWindows(window.Hwnd, w => w.ClassName == "Button" && new WinButton(w.Hwnd).Title == "&Open").FirstOrDefault();
            if (windowButton == null)
                return null;
            else
                return new WinButton(windowButton.Hwnd);
        }
    }
}

Вы можете просто скопировать и вставить этот класс в вашу программу, и с 4 строками кода выше он позаботится обо всем остальном.Если вам нужно больше информации, то есть много информации об исходном коде файла WatIn, но вам может быть немного сложно следовать, если вы не понимаете Windows API.

Надеюсь, это поможет.

0 голосов
/ 24 июня 2015

Эта команда прекрасно работает для меня: browser.FileUpload(Find.ById("FormImage")).Set("C:\\Pictures\\11.PNG"); Попробуй

...