1

我正在尝试使用 WATIR 自动上传文件。我不控制网站代码,并且 javascript 被混淆了,它一直令人沮丧。

我试图设置 file_field ,但该网站使用 javascript 来发布帖子,我无法触发提交。我最好的方法是模仿用户。

有一个拖放界面,单击它会打开一个标准的 OSX 文件选择器对话框。我无法弄清楚如何从 WATIR 控制这个文件选择器对话框。看起来在 IE 上有一个名为 window_helper 的库,它允许您执行此操作。

如何使用 watir 和 IE 上传文件?

我无法在 Chrome 中弄清楚。

4

5 回答 5

3

我发现在 OSX 上与文件上传字段交互的最可靠方法是使用:

$browser.file_field(:id, //).set("filepath\/...\/file.png")

不幸的是,它只会选择文件,不会关闭对话框。

然而,正如 Željko 所说,如果没有任何关于页面外观/代码在做什么的参考点,很难提供帮助。

于 2013-03-01T23:13:19.683 回答
3

如果您唯一的选择是自动化操作系统的文件选择控制,那么您可能不得不在脚本中使用不同的工具。

要考虑的一种选择是视觉效果的Sikuli 。我没有尝试在 Mac 上使用它,所以我不知道它是否适合该平台,但它在 PC 上运行良好。

另一种可能是 gem AXElements,我没有使用过,但看起来很有希望

于 2013-03-13T19:16:48.407 回答
2

我知道这是一个较老的问题,但我最近不得不为我们工作中的自动化套件处理 OSX 上的 FileUpload 表,所以我想我会把它作为人们的资源发布。实际上,我们确实将 Sikuli 用于前面提到的某些事情,但尽量将其用作最后的手段,因为它需要视觉识别。(虽然同意它工作得很好)

相反,我使用了几个 Applescript 处理程序。我们的需求与海报的不同,所以通常这些不包含在如下相同的脚本中。为了方便任何想要获取代码的人,我只是将它们放在脚本中。只需使用您想要调用文件上传表的任何工具,然后从终端运行以下代码:

osascript /Path/To/The/Saved/Script.scpt /Path/To/MyUploadFile.txt 火狐打开

如您所见,它需要 3 个参数。要上传的文件的路径、浏览器的名称以及要在“文件上传”表中单击的按钮。当然,如果需要,您可以对这些值进行硬编码。实际上,我们偶尔需要单击“取消”,这就是为什么会这样。

on run argv
if count of argv is not equal to 3 then
    log "You must pass 3 arguments to this script. The path to the file to upload, the browser name and finally the button to click."
    quit
end if

set theFileToUploadPath to item 1 of argv
set theBrowserName to item 2 of argv
set theButtonToClick to item 3 of argv 

goToFolder(theFileToUploadPath)
delay 1
clickFileUploadButton(theBrowserName, theButtonToClick)
end run

on goToFolder(folderPath)
tell application "System Events"
    keystroke "g" using {command down, shift down}
    delay 1
    keystroke folderPath
    delay 1
    key code 76
end tell
end goToFolder

on clickFileUploadButton(browserName, buttonToClick)
tell application "System Events"

    try
        tell process browserName
            activate
            if buttonToClick is equal to "Cancel" then
                click button "Cancel" of window "File Upload"
            else if buttonToClick is equal to "Open" then
                click button "Open" of window "File Upload"
            else
                log "Incorrect button passed to handler"
            end if
        end tell
    on error
        log "Unable to close File Upload window for browser: " & browserName
    end try

end tell
end clickFileUploadButton 

希望这在某些时候对某人有所帮助。

于 2013-12-18T18:47:48.833 回答
0

可能在填充该字段后,可能有一些客户端代码正在等待诸如 onChange 之类的事件触发。您可能必须在更改设置文件名后尝试在控件上触发事件

于 2013-03-08T06:10:21.707 回答
0

您可以使用 RAutomation 来执行此操作,这可以访问默认文件选择器对话框

例子:

window = RAutomation::Window.new :title => windowTitle
window.text_field(:class =>"Edit").set(file_name)
window.button(:value => "&Open").click
于 2013-03-04T13:22:15.460 回答