我需要使用watin在网站上传文件。问题是设置文件的方向,如下所示:
browser.FileUpload(Find.ById("ctl00_cpContent_FileUpload1")).Set(DIRECCION_XML + "plantilla.txt");
不起作用。因为这个,我需要处理出现的窗口弹出窗口并填充要上载的文件的方向。我不知道该怎么做...我正在搜索FileUploadHandler的信息,但我无法得到它。
还有更多选择吗?请帮我一个可能的代码来做。
非常感谢
答案 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");
试试吧