处理填充文件上传框时生成的弹出窗口

时间:2011-12-12 19:32:24

标签: ruby watir watir-webdriver

我正在查看Watir wiki Watir File Uploads

中的文件上传部分

我正在使用的环境:

  • Ruby:1.8.7
  • Watir:1.8.1

我的代码如下:

ie = Watir::Browser.start("tinypic.com") 
ie.file_field(:id, "the_file").set("C:\\image.png")

现在,当文件“image.png”不存在时,它会产生一个弹出窗口,如下所示 Error Popup

我尝试使用Wiki上Javacript弹出部分中的弹出处理程序,但经过调试后,我发现除非处理弹出窗口,否则set方法不会返回。

处理它的好方法是什么?在Google上搜索时,我发现某个地方你可以在Ruby中启动一个不同的进程并尝试关闭弹出窗口。如果是这种情况,我可以获得一些关于如何进行上述事情的示例代码或指南吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我对这个答案也很感兴趣,而且我有一些信息......我正在使用watir-webdriver,但我认为我们可能会遇到同样的问题。

在watir-webdriver中,我可以通过使用AlertHelper扩展或手动覆盖javascript函数来处理大多数弹出窗口。这两种技术在http://watirwebdriver.com/javascript-dialogs/处描述......“手动覆盖”(页面下方)也应该适用于IE Watir。

你要包含这一行:ie.execute_script(“window.alert = function(){}”)

紧接在你的行之前:ie.file_field(:id,“the_file”)。set(“C:\ image.png”)

这可能适合你。

但是,如果AJAX和PHP动态生成警报或对话框,则这些技术不起作用。我一直在寻找一个解决方案,以便如何与PHP将它们发送到页面时调用的动态加载的javascript警报进行交互。在https://github.com/jarib/watir-webdriver/issues/103的讨论让我相信selenium-webdriver可以通过使用alert_box.text和alert_box.dismiss方法来做到这一点,但是watir-webdriver API还没有利用它,就我而言可以看到。

感谢任何能够提供更彻底的解决方案的人如何在watir和watir-webdriver中处理动态生成的警报。

凯文

答案 1 :(得分:0)

感谢您输入Kevin,

我实际上想出了这个答案[我从Watir Wiki方法1中调整了它]对于Watir General的以下post的乔治。我写了一个像这样的弹出处理程序:

require 'win32ole' 
title = "Choose File to Upload"

      begin
         popupOccurred = false
         autoIt = WIN32OLE.new('AutoItX3.Control')
         timeout = 15
         autoIt.WinWait(title, '', timeout)
         autoIt.ControlClick(title, "", "&Open")
         sleep 1
         autoIt.WinWait(title, '', timeout)
         isClicked = autoIt.ControlClick(title, "", "OK")
         sleep 1
         autoIt.ControlClick(title, "", "Cancel") if (isClicked == 1)
         autoIt.ole_free
      rescue
        puts "Error closing popup, please close Manually"
      end

在我的代码片段中,我执行了以下操作:

require 'watir'

b = Watir::Browser.start("tinypic.com")
#-- Launches the popup closer in a different process. other methods like
#-- Process.create or system(start rubyw C:\\popup_handler2.rb) or having the
#-- popup handler in a Thread did not work for me.
system("start ruby C:\\popup_handler2.rb") 
b.file_field(:id, "the_file").set("C:\\image.png")

我非常感谢来自Watir大师/开发者/用户的一些反馈。

谢谢,

切塔尼亚