You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:54:07