使用javascript在Firefox Add-on中设置<input type =“file”/>值

时间:2012-11-29 14:24:52

标签: javascript file-upload firefox-addon

我面前有以下场景:

我正在使用Selenium来驱动我的浏览器填写一些表格,这非常有用。

现在我处于这一点,我也想通过给定的webform上传文件(不能改变它的处理方式,只能操纵Javascript / HTML / DOM)。正如我所知,出于安全原因,当单击该字段时,文件上载窗口会立即弹出。而且通过普通的Javascript操作也是不可能的。也有道理......

我发现,Firefox附加组件应该能够做到这一点。我最接近答案的是another Stack Overflow thread on this topic。如果我让这个适合我,那就太棒了! :-)但不幸的是我没有,但是......

最小例子:

<form method="post" url="http://www.example.com">
<input type="file" id="fileInput"/>
</form>

(在Firebug中从控制台调用)

document.getElementById('fileInput').value = "C:\\image.png";

in get“错误:操作不安全。”这就是我的期望。

在Firefox Add-On中的contentScriptFile中调用相同内容时(我使用加载项构建器来创建它),脚本只会中断而不会出错。我的指标是,我之前看到了警报,但没有在该行之后看到

现在的问题不是为什么我没有得到错误,而是:
我在正确的轨道上吗?这应该有用吗? 2.我如何使这项工作?我不确定在上述链接中提及“chrome权威”是否与我相关。我是否必须以某种方式扩展脚本权限?如果是这样,怎么样?

谢谢! 桑德罗

P.S。当我尝试通过jQuery设置值时,Firefox完全崩溃了。
P.P.S.目前这只能在我的个人计算机上运行,​​因此跨浏览器问题或类似的事情是不相关的

1 个答案:

答案 0 :(得分:2)

我现在找到了一个有效的解决方案。部分问题似乎是我一直在使用Selenium VBA包装器。然后我用C#实现尝试了一个快速的Powershell脚本,它就像一个魅力。

要点: 原始目标:使用Selenium上传具有给定表单的文件 解决方案:在'file'类型的输入元素上使用SendKeys方法,以提供文件的完整路径 Powershell中的示例脚本:

add-type -path C:\path\To\the\dll\on\your\harddrive\webdriver.dll
$driver = New-Object OpenQA.Selenium.Firefox.FirefoxDriver
#the following page contains an element <input type='file' id='fileInput'/>
$driver.Url = "http://pathToTheSite.com/fileUploadFormPage.html"

$element = $driver.FindElementById("fileInput")

$element.SendKeys("C:\Image.png")

完成!该文件已附加,表格一次性提交