【问题标题】:Automating a File Upload with WATIR in Chrome on OSX在 OSX 上的 Chrome 中使用 WATIR 自动上传文件
【发布时间】:2013-12-19 02:47:48
【问题描述】:

我正在尝试使用 WATIR 自动上传文件。我不控制网站代码,而且 javascript 被混淆了,搞不清楚。

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

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

How to upload a file with watir and IE?

我无法在 Chrome 中找到它。

【问题讨论】:

  • 请分享页面链接和您目前拥有的代码。
  • 该页面是Google Play上的文件上传框。我们正在尝试自动上传 android APK。我无法共享链接,因为它落后于身份验证。我们还没有任何代码,因为这是最难的部分,而且还没有找到对文件选择器对话框的支持。
  • 你能给出这样一个页面的路径吗?还是必须有人注册为开发者才能访问上传页面?

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 所以我猜这是真的。在 Mac OSX 上,WATIR 无法与 chrome 中的文件选择器对话框进行交互。
  • 那些选择器对话框很可能来自操作系统,并没有真正出现在浏览器的“内部”。如果您正在测试那种东西,您将需要一些其他脚本工具来填写对话框。但也要问自己,测试操作系统是你的工作吗?所有这些对话框通常会返回一个文件规范(路径+名称),你通常可以直接输入,或者直接通过执行一些 javascript 来设置。
【解决方案2】:

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

要考虑的一个选项是Sikuli,它可以直观地工作。我没有尝试在 Mac 上使用它,所以我不知道它是否适合该平台,但它在 PC 上运行良好。

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

【讨论】:

  • 感谢 Chuck,感谢 AXElements.. 设法解决了 OS X 中 Chrome 的文件上传对话框..
【解决方案3】:

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

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

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

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

希望这可以在某些时候帮助某人。

【讨论】:

    【解决方案4】:

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

    例子:

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

    【讨论】:

    • 上次我读到,RAutomation 仅适用于 Windows。问题是关于 OS X。
    • 是的,目前仅适用于 Windows。
    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多