PAMIE(winGuiAuto)中模拟点击浏览器alert弹窗的方法

     handle = winGuiAuto.findTopWindow(u'来自网页的消息')
     if handle: 
         try:
             control_list = winGuiAuto.dumpWindow(handle)
             print(control_list)

             if control_list[2][1] == u'验证码不正确!!':
                 #winGuiAuto.findControl(handle)
                 winGuiAuto.clickButton(winGuiAuto.findControl(handle, 'Button', u'确定'))

上面这段代码在win8之前都可以完美运行,但是经过在ie10(win8)上实际使用却出了问题,无法给窗体发送click消息.

追查winGuiAuto.py的源码,查找clickButton为:

def clickButton(hwnd):
    '''Simulates a single mouse click on a button

    Arguments:
    hwnd    Window handle of the required button.

    Usage example:  okButton = findControl(fontDialog,
                                           wantedClass="Button",
                                           wantedText="OK")
                    clickButton(okButton)
    '''
    _sendNotifyMessage(hwnd, win32con.BN_CLICKED)

 

到调用win32gui包发送message看上去一切都很顺理成章

def _sendNotifyMessage(hwnd, nofifyMessage):
    '''Send a notify message to a control.'''
    win32gui.SendMessage(win32gui.GetParent(hwnd),
                         win32con.WM_COMMAND,
                         _buildWinLong(nofifyMessage,
                                       win32api.GetWindowLong(hwnd,
                                                              win32con.GWL_ID)),
                         hwnd)

后来google了win32编程一些文章看了也没发现个所以然,迫于考试压力只好不甘心地先终止掉了.换了一种脑残方案曲线救国实现效果.如有知情人士知道为什么ie10(win8)不支持这里发送的BN_CLICKED事件,还望指教.

ps:初步估计是因为我用的winGuiAuto win32.con是外国佬非官方改造的for py3.3的修改版,里面肯定有bug,导致了这个模拟点击的不可用. 看来py3还有好长的路要走,现在还是老实地回到2时代吧 哈哈.

 

 

 

曲线救国方案:

实现弹出alert的确认(其实就是发送回车键)

    print(ie._docGetReadyState) #利用pamie检查area的方法实现页面加载完成后才触发后面的语句
    win32gui.PostMessage(winGuiAuto.findControl(handle), win32con.WM_KEYDOWN, win32con.VK_RETURN, 0) #给alert窗口发送回车确认事件
    win32gui.PostMessage(winGuiAuto.findControl(handle), win32con.WM_KEYUP, win32con.VK_RETURN, 0)

注:发送任何按键操作都要发DOWN和UP两个指令.这个会win编程的都懂原因的,不再赘述.

Read More

支持Python3.3的winGuiAuto.py源码下载,修复其中自带的bug

如果你在运用时候出现了类似下面的bug提示的话,这个是因为源码本身有个小bug,此处提供的下载包已解决此问题.

同时,已经完美支持python3以上版本使用

winGuiAuto.WinGuiAutoError: No control found for topHwnd=531944, wantedText=’Button’, wantedClass=None, selectionFunction=None

如有其它问题可以留言互动.

winGuiAuto.tar

Read More