FileUpload watin

时间:2011-06-03 10:39:50

标签: c# file-upload watin

我需要使用watin在网站上传文件。问题是设置文件的方向,如下所示:

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

不起作用。因为这个,我需要处理出现的窗口弹出窗口并填充要上载的文件的方向。我不知道该怎么做...我正在搜索FileUploadHandler的信息,但我无法得到它。

还有更多选择吗?请帮我一个可能的代码来做。

非常感谢

2 个答案:

答案 0 :(得分:1)

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,可能会有点难以理解。

希望这有帮助。

答案 1 :(得分:0)

这个命令对我很有用:browser.FileUpload(Find.ById("FormImage")).Set("C:\\Pictures\\11.PNG"); 试试吧