首页 > 解决方案 > 使用没有 NoFileChosen 选项的 Selenium C# 在浏览器中上传文件

问题描述

我正在尝试上传文件。我的应用程序只有一个浏览按钮,没有地方可以发送任何文件路径。所以我无法使用SendKeys.SendWait(@"filepath");我尝试使用JavaScriptExecutor但在使用以下代码时出错:

IWebElement upload = _driver.FindElement(By.XPath("//div[starts-with(@class,'addDoc') and contains(text(),'Browse')]"));

string filepath = @"C:/Users/../Amazon vs Walmart.pdf";
String script = "document.upload.value= " + filepath;
((IJavaScriptExecutor)_driver).ExecuteScript(script);

Runtime.evaluate 抛出异常: SyntaxError: Unexpected token :

为什么我得到异常?

标签: c#seleniumselenium-webdriverautoit-c#-wrapper

解决方案


与文件浏览窗口交互超出了 webdriver 的功能范围。当您单击浏览时,浏览器会将您转到操作系统以查找文件。Javascript 不能作用于这些窗口。

SendWait 用作将文件的 uri 传递给打开的窗口并返回的技巧。如果这不起作用,您将需要使用某些东西与操作系统窗口进行交互。

在使用 IE 时,我个人使用InputSimulatorCore来处理此类问题,IE 有很多此类文件下载问题。

编辑:如果您控制应用程序更改为基于表单的上传将允许您在 Selenium 中进行测试,并且是最佳选择。如果没有,您也可以直接向上传端点发帖。


推荐阅读