c# - 使用没有 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 :
为什么我得到异常?
解决方案
与文件浏览窗口交互超出了 webdriver 的功能范围。当您单击浏览时,浏览器会将您转到操作系统以查找文件。Javascript 不能作用于这些窗口。
SendWait 用作将文件的 uri 传递给打开的窗口并返回的技巧。如果这不起作用,您将需要使用某些东西与操作系统窗口进行交互。
在使用 IE 时,我个人使用InputSimulatorCore来处理此类问题,IE 有很多此类文件下载问题。
编辑:如果您控制应用程序更改为基于表单的上传将允许您在 Selenium 中进行测试,并且是最佳选择。如果没有,您也可以直接向上传端点发帖。
推荐阅读
- c++ - Xcode 找不到存在的文件(使用 c++ fopen)
- azure - 关于使用 Azure Web 应用获取 Outlook 日历
- python - 在 python BeautifulSoup 上获取带有特定前缀的超链接
- rabbitmq - rabbitmq 预取多个消费者
- unity3d - UI 面板没有根据屏幕尺寸定位自己
- javascript - classLList.toggle 属性不适用于 getElementsByClassName
- flutter - 如何保护颤振项目使用的资产免受apk反编译
- authentication - 登录多个角色和不同视图后如何重定向
- java - 错误:在 Windows 10 中无法找到或加载主类 org.apache.rocketmq.namesrv.NamesrvStartup
- r - Turn dataframe into list of lists rowwise?