使模态对话框脚本适应Firefox

时间:2011-04-13 01:11:50

标签: watir autoit firewatir

我正在调整我的回归测试来测试Firefox中的Web应用程序。最大的绊脚石似乎是如何在firefox中自动化模态对话框。

即我使用下面脚本的变体,但它在Firefox中不起作用。有没有一种方法可以在ie和firefox中使用?

popup=Thread.new {
    autoit=WIN32OLE.new('AutoItX3.Control')
    ret=autoit.WinWait(title,"",60)
    if (ret==1)
        puts "There is popup."
        autoit.WinActivate(title)
        button.downcase!
        if button.eql?("ok") || button.eql?("yes") || button.eql?("continue")
            autoit.Send("{Enter}")
        else
            autoit.Send("{tab}")
            autoit.Send("{Enter}")
        end
    elsif (ret==0)
        puts "No popup, please check your code."
    end
}
at_exit { Thread.kill(popup) }
end

   button.click_no_wait

   check_for_popups("Message from webpage", "OK")    

2 个答案:

答案 0 :(得分:2)

鉴于你在谈论一个javascript创建的对话框,我真的不得不问,实际测试那些有很多价值吗?

它基本上等于测试浏览器的功能

如果你在谈论这里描述的弹出窗口类型http://wiki.openqa.org/display/WTR/JavaScript+Pop+Ups,那么我认为第一个覆盖javascript的解决方案可能是你最好的跨平台选项。

像这样的模态对话框的问题在于它们基本上是一个UI,即使在操作系统级别发生,它也不再在浏览器DOM中,因此你需要特定于操作系统的工具(比如那些东西)取决于win32ole,例如autoit),以便与本机UI和点击按钮生成必要的交互,发送击键等。我认为大多数解决方案应该在Windows上使用FF(正确重命名预期的窗口标题等)但在mac或* nix操作系统上会失败。这意味着您需要为每个操作系统提供不同的解决方案,这很痛苦。

可能只是更容易验证您是否可以找到在页面的HTML中触发事件的正确内容,因此您知道要触发的事件,然后覆盖事物,而不是。毕竟,在javascript中调用类似alert('This is an alert box')的内容时,验证浏览器是否会弹出本地对话框并不是真正的工作。您担心的是,在HTML中,给定元素被编码以触发所需的事件,例如,这个与onClick = 'javascript:x = confirm('Do you really want to do this');"有关联的元素

答案 1 :(得分:0)

我在Firefox中遇到类似的问题(我必须在Firefox中测试)。我可以看到调用Javascript的代码但是当我尝试覆盖如上所述时没有任何反应。这有什么办法吗?对Watir的预期更新? ; - )