Selenium 如何将文件上传到 Microsoft Edge

Selenium how to upload files to Microsoft Edge

我正在使用以下代码将文件上传到网站的 'file' 类型元素。

该代码在 Firefox、Chrome 和 Safari 中运行良好。

然而,当我 运行 针对 Edge 的代码未上传文件时

driver.setFileDetector(new LocalFileDetector());
selectFile.sendKeys(path);

报错: 命令失败,因为指定的元素不是指针或键盘可交互的。

如果我尝试像这样使用 Javascript:

document.getElementById('manual_file_selection').sendKeys(path)

我明白了:对象不支持 属性 或方法 'sendKeys'

如前所述,相同的代码在 Chrome、Firefox 和 Safari 中运行良好,所以我不明白。

这是文件上传按钮背后的代码:

<div class="jsx-parser">
  <div data-xxxxx-element="manual-file-selection">
    <div class="button__container">
      <label for="manual_file_selection" class="button button--primary" data-dragging="false" data-xxxxx-element="manual-file-selection--label">
        <input id="manual_file_selection" type="file" accept="image/jpeg,image/png" data-xxxxx-element="manual-file-selection--input">
         <span>Select File</span>
      </label>
      </div>
 </div>
</div>

有人使用 Selenium 将文件上传到 Edge 成功了吗?或者它是否不受支持?

根据您的错误消息,我会试一试 Javascript。这有点 hacky,因为我们执行 JS 以显示隐藏的 input 元素,然后将密钥发送给它,但我过去曾成功过。

// fetch the element
WebElement input = driver.findElement(By.XPath("//input[@type='file']"));

// run JS to reveal the element
JavascriptExecutor executor = (JavaScriptExecutor)driver;
executor.executeScript("arguments[0].style.display = 'block';", input);

// send file path keys
input.sendKeys(path);

值得一试。让我知道这是否有帮助。