在OSX上使用Chrome中的WATIR自动执行文件上载

时间:2013-03-01 17:47:37

标签: ruby macos google-chrome watir watir-webdriver

我正在尝试使用WATIR自动执行文件上传。我没有控制网站代码,而且javascript被混淆,因此很难搞清楚。

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

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

How to upload a file with watir and IE?

我无法在Chrome中弄明白。

5 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

我知道这是一个较旧的问题,但我最近不得不在OSX上为我们的自动套件处理FileUpload表,所以我想把它作为人们的资源发布。我们确实使用Sikuli来处理前面提到的某些事情,但是尝试将它作为最后的手段,因为它需要视觉识别。 (虽然同意它运作良好)

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

osascript /Path/To/The/Saved/Script.scpt /Path/To/MyUploadFile.txt Firefox Open

如您所见,它需要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 

希望这在某些方面对某人有所帮助。

答案 3 :(得分:0)

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

示例:

window = RAutomation::Window.new :title => windowTitle
window.text_field(:class =>"Edit").set(file_name)
window.button(:value => "&Open").click

答案 4 :(得分:0)

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