C#结合Selenium使用AutoIt上传文件时路径错误、键入速度过快如何解决
问题根因
你对AutoItX3.Send()方法的第二个参数理解有误,这个参数是标志位参数,仅接受0/1两个枚举值,作用是控制特殊字符是否转义,并不是用来设置键入延迟的,所以你设置787000完全不生效,键入速度还是默认值。
解决方案
方法1:设置全局键入延迟(适配模拟键入场景)
AutoIt提供了单独的配置方法设置全局键入间隔,在调用Send之前先配置SendKeyDelay参数即可,单位是毫秒,数值越大键入越慢:
autoIt = new AutoItX3(); // 配置每个按键之间的间隔,可根据实际情况调整数值 autoIt.AutoItSetOption("SendKeyDelay", 100); // 可选配置:按键按下后的保持时长,避免系统识别不到按键输入 autoIt.AutoItSetOption("SendKeyDownDelay", 20); autoIt.WinActivate("Farklı Kaydet"); Thread.Sleep(1000); autoIt.Send(AppDomain.CurrentDomain.BaseDirectory + @"video" + @"\" + textBox7.Text, 0); autoIt.Send("{ENTER}");
方法2:直接给输入框赋值(优先推荐,完全避免输入错误)
不需要模拟键盘输入整个路径,AutoIt可以直接给文件选择窗口的文件名输入框赋值,一步到位不会因为键入速度、窗口失焦、特殊字符等问题出错:
autoIt = new AutoItX3(); autoIt.WinActivate("Farklı Kaydet"); Thread.Sleep(1000); string fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "video", textBox7.Text); // 直接给文件选择窗口的文件名输入控件设置内容,Edit1是通用文件选择框的输入控件ID,可通过AutoIt窗口信息工具确认你当前窗口的控件ID autoIt.ControlSetText("Farklı Kaydet", "", "Edit1", fullPath); autoIt.Send("{ENTER}");
方法3:逐字符输入(极端场景备用)
如果必须模拟手动键入的效果,也可以自行拆分路径字符,每个字符输入后加固定延迟:
autoIt = new AutoItX3(); autoIt.WinActivate("Farklı Kaydet"); Thread.Sleep(1000); string fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "video", textBox7.Text); foreach (char c in fullPath) { autoIt.Send(c.ToString()); Thread.Sleep(50); // 可自行调整间隔时长 } autoIt.Send("{ENTER}");
内容的提问来源于stack exchange,提问作者Yavuz
相关产品推荐
相关产品推荐

