使用Selenium Webdriver/xUnit/C#在Edge加载文件失败该如何解决?
Edge浏览器Selenium文件上传失败解决方案
当前使用的文件上传控件带有directory、webkitdirectory等目录选择属性,Edge的Chromium内核对此类控件的SendKeys路径校验逻辑与Firefox、IE不同,当传递的路径类型与控件预期不匹配时,就会触发「Please choose a file」的必填提示,可通过以下方案解决:
- 方案1:移除控件的目录选择属性后再上传
如果你仅需要上传单个文件,可通过JS执行器先移除控件的目录相关属性,再调用SendKeys传递文件路径,代码示例:
IWebElement buttonUpload = driver.FindElement(By.Id("DICOMInput")); IJavaScriptExecutor js = (IJavaScriptExecutor)driver; // 移除目录选择相关属性,兼容单文件上传 js.ExecuteScript("arguments[0].removeAttribute('webkitdirectory')", buttonUpload); js.ExecuteScript("arguments[0].removeAttribute('directory')", buttonUpload); js.ExecuteScript("arguments[0].removeAttribute('allowdirs')", buttonUpload); string FilePath = @"此处替换为你的文件绝对路径"; buttonUpload.SendKeys(FilePath); driver.FindElement(By.Id("LoadFilesButton")).Click();
- 方案2:匹配路径类型与控件属性
如果你需要上传整个目录,直接传递文件夹的绝对路径即可,不要传递单个文件路径,符合控件的目录选择预期。如果需要上传多个文件,将所有文件的绝对路径用换行符拼接后传递:
var fileList = new List<string> { @"C:\test\file1.dcm", @"C:\test\file2.dcm" }; buttonUpload.SendKeys(string.Join("\n", fileList));
方案3:修复驱动与浏览器版本匹配问题
确认你使用的EdgeDriver版本与本地Edge浏览器主版本号完全一致,版本不匹配会导致大量原生交互兼容性问题。你可以在Edge浏览器的「设置 - 关于Microsoft Edge」页面查看当前浏览器版本,下载对应版本的EdgeDriver使用。方案4:添加Edge启动参数绕过校验
初始化EdgeDriver时添加安全参数,禁用文件上传的安全校验拦截:
EdgeOptions edgeOptions = new EdgeOptions(); edgeOptions.AddArgument("--allow-file-access-from-files"); edgeOptions.AddArgument("--disable-web-security"); var driver = new EdgeDriver(edgeOptions);
内容的提问来源于stack exchange,提问作者Ben_G
相关产品推荐
相关产品推荐

