首页 > 解决方案 > 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 不行。

有任何想法吗?

标签: c#seleniumselenium-chromedriversendkeys

解决方案


我在这里和其他互联网资源上搜索了很多问题,发现使用方法从外部 URL 上传文件的唯一driver.SendKeys()方法是首先将其下载到本地磁盘,然后使用driver.SendKeys()
Proof上传


推荐阅读