4

我面前有以下场景:

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

现在我到了这一点,我还想通过给定的网络表单上传文件(不能改变它的处理方式,只能操作 Javascript/HTML/DOM)。正如我所发现的,出于安全原因,单击该字段时会立即弹出文件上传窗口。并且也无法通过普通的 Javascript 进行操作。也有道理...

不过我发现,Firefox 附加组件应该能够做到这一点。我最接近答案的是关于这个主题的另一个 Stack Overflow 线程。如果我让这个为我工作,那就太棒了!:-) 但不幸的是我还没有……

最小的例子:

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

调用时(从 Firebug 中的控制台)

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

在获取“错误:操作不安全。” 这是我所期望的。

当在 Firefox 附加组件中的 contentScriptFile 中调用相同的内容时(我正在使用附加组件构建器来创建它),脚本会简单地中断而不会出现错误。我的指标是,我之前确实看到了警报,但在那条线之后没有看到

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

谢谢!
桑德罗

PS 当我尝试通过 jQuery 设置值时,Firefox 完全崩溃了。
PPS 目前这仅适用于我的个人计算机,跨浏览器问题或类似问题因此不相关

4

1 回答 1

2

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

摘要:原始目标:使用 Selenium 上传具有给定表单的文件解决方案:在“文件”类型的输入元素上使用 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")

完毕!!!文件附上,表格一次性提交

于 2012-12-05T10:31:28.647 回答