自动文件上传与WATIR在Chrome上的OSX



我正在尝试使用WATIR自动上传文件。我不能控制网站代码,javascript是模糊的,这是令人沮丧的计算。

我已经尝试设置file_field,但该网站正在使用javascript做的帖子,我不能触发提交。我最大的努力就是模仿用户。

有一个拖放界面,点击它会打开一个标准的OSX文件选择器对话框。我还没能弄清楚如何从WATIR控制这个文件选择器对话框。看起来在IE中有一个叫做window_helper的库可以让你这样做。

如何用watir和IE上传文件?

我无法在Chrome中找到它。

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

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

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

然而,正如Željko所说,没有任何参考点来帮助页面看起来像什么/你的代码在做什么

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

一个可以考虑的选择是Sikuli,它可以在视觉上工作。我没有在mac上试过,所以我不知道它是否适合那个平台,但它在PC上运行得很好。

另一个可能是gem AXElements,我没有使用过,但看起来很有前途

我知道这是一个古老的问题,但我最近不得不处理OSX上的FileUpload表,所以我认为我应该把它作为人们的资源。我们确实会在某些事情上使用Sikuli,就像之前提到的那样,但尽量把它作为最后的手段,因为它需要视觉识别。(尽管我同意它工作得很好)

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

osascript/道路///保存/脚本。scpt/Path/To/MyUploadFile.txt Firefox打开

如你所见,它需要3个参数。要上传的文件的路径、浏览器的名称以及要在file upload工作表中单击的按钮。当然,如果需要的话,您可以对这些值进行硬编码。我们有时需要点击取消这就是为什么会这样。
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 

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

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

的例子:

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

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

的设置后尝试在控件上触发事件。

相关内容

最新更新