watir处理--非click激活的对话框

2010-04-21  刘俊 

   群里一个朋友问我一个问题是关于对话框的处理的。之前遇到过很多次,所以就说帮她看看。
   昨天晚上回到家弄了好久都搞不好,后来同事提醒才发现,这个对话框不是click激发的,而是在输入值的时候会有一个JS判断,如果两个输入框的值不一样就直接alert一个信息,这下可把我难住了。
   今天晚上琢磨了一下,决定用线程来做。如果大家有更好的办法还望不吝赐教!
===============================解决方法===================================
   建两个ruby文件:Demo1.rb和Demo2.rb。
   Demo1.rb中的代码为:
    require 'rubygems'
    require 'watir'
    require 'win32ole'
 
    Thread.new{system('ruby F:\ruby\Demo2.rb')}   #另起一个线程用来监控
     ie = Watir::IE.new
     ie.goto('http://www.www.com')
     ie.form(:id,'password_form').text_field(:id,'text1').set '1234'
     ie.form(:id,'password_form').text_field(:id,'text2').set '1234'
     ie.form(:id,'password_form').text_field(:id,'text3').set '2345'    
#此时对话框自动弹出
 
    Demo2.rb中的代码为:
     require 'watir/win32ole'
     require 'watir/ie'
 
     def newthred
          @autoit = Watir.autoit
           puts '=========================================='
           res = @autoit.WinWait "Microsoft Internet Explorer", ""
           alter_content =  @autoit.ControlGetText("Microsoft Internet Explorer",'','Static2')
           puts alter_content      #输入alert中的提示信息
           puts '=========================================='
           @autoit.winactive("Microsoft Internet Explorer")   # 这种方法不需要对话框在最前面都可以点到
           @autoit.controlclick("Microsoft Internet Explorer", "", "Button1")
           #@autoit.Send "{TAB}"  
# 这种方法需要对话框在最前面才可以点到
           #@autoit.Send "{TAB}"
           #@autoit.Send "{SPACE}"
    end
    newthred()
563°/5571 人阅读/6 条评论 发表评论

李超  2010-04-21

用失去焦点触发事件


刘俊  2010-04-21

李超: 用失去焦点触发事件
好抽象,能具体一点吗?


朱斌  2010-04-21

我是来看照片的


刘俊  2010-04-22

朱斌: 我是来看照片的
等公司把照片搜集好了,我全部传上来


赵磊  2010-04-22

刘俊: 好抽象,能具体一点吗?
阅读了下api  http://wtr.rubyforge.org/rdoc/1.6.5/classes/Watir/Element.html#M000557
里面有个focus,这个是焦点获得后触发事件.没看到有blur(失去焦点)之类的方法, 这个 fire_event  (event)  方法也许有帮助.或者,第二个文本框赋完值后,把焦点放到其他的元素上,不也就相当于失去焦点了嘛.
好久没用了,我现在也没有环境,你试试对不对.


刘俊  2010-04-22

当第二个文本框赋值完以后就会自动触发js进行验证,和focus没有关系的。


登录 后发表评论