【问题标题】:IE browser doesn't close and file download popup needs focusIE浏览器不关闭,文件下载弹出需要关注
【发布时间】:2010-06-17 03:03:24
【问题描述】:

我试图在链接处于活动状态后再次单击它 单击后会产生一个弹出窗口(文件下载)。 这里我有2个问题

1) 我启动代码并保留它。代码的作用是 -after long 进程 - 它等待链接处于活动状态。一旦链接处于活动状态 它点击链接并打开一个下载弹出窗口(如果一切顺利 好)然后它挂在那里(在任务中显示黄色闪烁 栏,这意味着我必须单击资源管理器才能处理 不管接下来是什么)。每次我必须点击 IE 时 出现下载弹出窗口。有没有办法处理这个或者我在做什么 有什么不对吗?

2) 下一个问题是即使我点击 IE .the IE 也没有 关闭,即使我写 ie.close 。 我的代码如下:

                       ## if the link is active
                    ie.link(:text,a).click_no_wait
                     prompt_message = "Do you want to open or save this file?"
                     window_title = "File Download"
                     save_dialog =WIN32OLE.new("AutoItX3.Control")
                       save_dialog.WinGetText(window_title)

                       save_dialog_obtained =save_dialog.WinWaitActive(window_title)
                        save_dialog.WinKill(window_title)
                      # end
                      #'
                       #some more code -normal puts statements
                      #

                    ie.close

ie 由于某种奇怪的原因挂断了 ..?

【问题讨论】:

  • 我很想知道这些标签的含义 :-)
  • AutoIt 是一种专注于 Windows UI 操作的脚本语言。一个需要注意的好工具。

标签: watir autoit


【解决方案1】:

对于#2。您可能希望将代码“附加”到父窗口,然后尝试关闭它。看起来当下载对话框打开时,父窗口失去焦点。你可以试试-

ie = Watir::IE.attach(:url, ) (OR) ie = Watir::IE.attach(:title, )

然后尝试关闭浏览器。

【讨论】:

  • attach 我相信被贬低了。 Watir 3 使用与 watir-webdriver 用户相同的窗口切换 api。但是我认为这种情况下的弹出窗口不是浏览器窗口,必须在操作系统级别使用 AutoIt 或 RAutomation 之类的东西处理
【解决方案2】:

我不确定您的弹出窗口问题,但我有代码来处理我自己发现的一个非常令人沮丧的弹出窗口问题。因此,为了完整起见,我将其包括在内。这里你的ie浏览器对象相当于我的@browser实例对象

require 'watir\winClicker'
require 'watir\contrib\enabled_popup'

def popup_clicker(text)
    begin
      Timeout::timeout 2 , PopupTimeout do
        if @browser.enabled_popup
          hwnd = @browser.enabled_popup(5)
          w = WinClicker.new
          w.makeWindowActive(hwnd)
          w.clickWindowsButton_hwnd(hwnd,text)
        end
      end
    rescue PopupTimeout
        # Do this line if you can't find a popup
    end
    @browser.wait
  end

然后点击确定按钮运行

popup_clicker('OK')

您可能会注意到的一件事是,您需要手动点击通过硬件点击触发弹出窗口的按钮。 AutoIT 可能会处理这个问题,或者如果你想要的话,我有一个手动的 Watir 元素点击器。不先尝试。如果你愿意,我也有代码来检查弹出内容(基本上是把 'popup_text = w.getStaticText_hWnd(hwnd).to_s' 扔进去)。

至于 2) 确保 'ie' 对象仍设置为浏览器。正如 Namrantha 所说,尝试重新连接。我不知道 ie.close 会失败。这应该可以工作,替换您认为合适的 @browser,并且 XXX 是窗口的标题或等效的正则表达式:

@browser = Watir::IE.attach(:title, XXXX)
@browser.close

弹出式点击器原件的功劳必须归于我能找到的链中最靠后的位置,Watir-General 谷歌小组中的一位可爱的用户,名叫 Wesley Chen:

http://groups.google.com/group/watir-general/browse_thread/thread/41c45aae9f87da9b

【讨论】:

    猜你喜欢
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    相关资源
    最近更新 更多