c# - Selenium 文件从 URL 上传而不是本地文件
问题描述
尝试通过 Selenium/ChromeDriver 上传带有 HTML 输入元素的文件。
如果该文件是本地文件,则一切正常。
但我需要从 URL 上传。在这种情况下,驱动程序会引发错误。
如果我手动上传带有 chrome 的 URL(单击“选择文件”并将 URL 粘贴为文件名并单击确定),则上传按预期工作。
HTML:
<input type="file" name="file1">
C#代码:
var driver = new ChromeDriver();
driver.Navigate().GoToUrl("<URL HERE>");
var input = driver.FindElement(By.Name(name));
ele.SendKeys("C:\\pic.png"); //works because local file exists
ele.SendKeys("https://wikipedia.org/static/favicon/wikipedia.ico"); //fails
异常:OpenQA.Selenium.WebDriverException:“无效参数:找不到文件:https ://wikipedia.org/static/favicon/wikipedia.ico(会话信息:chrome=92.0.4515.131)”
我发现抛出异常是因为驱动程序 DefaultFileDetector 无法将其解析为文件。
所以我尝试实现自己的 FileDetector 并将其分配给驱动程序:
var allowsDetection = driver as IAllowsFileDetection;
if (allowsDetection != null)
{
allowsDetection.FileDetector = new DummyFileDetector();
}
虚拟文件检测器:
class DummyFileDetector : IFileDetector
{
public bool IsFile(string keySequence)
{
return true;
}
}
但是 DummyFileDetector.IsFile 从未被调用(似乎allowDetection.FileDetector = new DummyFileDetector()不会更改驱动程序的FileDetector)。
我不想下载文件然后上传(如果可能的话)。如前所述,在文件选择对话框中手动设置 URL 可以解决问题,但 Selenium 不行。
有任何想法吗?
解决方案
我在这里和其他互联网资源上搜索了很多问题,发现使用方法从外部 URL 上传文件的唯一driver.SendKeys()
方法是首先将其下载到本地磁盘,然后使用driver.SendKeys()
Proof上传
推荐阅读
- html - 使用 VBA & IE 我需要点击页面上的某个文本
- java - 使用 Java 检索 MongoDb 嵌套文档的所有键
- mongodb - 如何在mongodb中启用异步复制?
- firebase - 如何让监听器监听多个文档集合
- wpf - WPF 如何在我的 XAML 主页面中使用包含数据模板的资源字典
- json - Sharepoint Online - JSON 列格式
- reactjs - Material UI Grid - 一旦在 Select 元素中选择了一个项目,就会调整文本字段的大小
- scala - Spark 在 Spark Dataframe 中的选择查询中如何表现这种类型描述
- javascript - 如何将反应应用程序创建为服务/包并将其导入另一个应用程序的“package.json”
- sql - 如何将我所知道的 UTC TIMESTAMP_NTZ 转换为 Snowflake SQL 中的 TIMESTAMP_TZ?