• Python操作IHTMLDocument2用于自动化测试(转)


    有些软件的界面采用Win32窗口嵌套一个IE控件,用Spy++只能识别出一个Internet Explorer_Server控件。常用的几个API函数无法取到IE控件里面的内容,更无法对里面的控件进行操作,所以这给自动化带来了麻烦。本文将讲述如何使用Python获取IHTMLDocument2接口,用于自动化测试。

    获取IHTMLDocument2接口

    参考:http://support.microsoft.com/kb/249232
    相应的Python实现代码如下:
    复制代码
    #!/usr/bin/env python
    #
    coding:utf-8

    __author__ = 'CoderZh'

    import sys

    # Important for multithreading
    sys.coinit_flags = 0 # pythoncom.COINIT_MULTITHREADED

    import win32com
    import win32com.client
    import win32gui
    import win32con
    import pythoncom

    def getIEServer(hwnd, ieServer):
        
    if win32gui.GetClassName(hwnd) == 'Internet Explorer_Server':
            ieServer.append(hwnd)

    if __name__ == '__main__':
        
    #pythoncom.CoInitializeEx(0) # not use this for multithreading
        mainHwnd = win32gui.FindWindow('windowclass''windowtitle')
        
    if mainHwnd:
            ieServers 
    = []
            win32gui.EnumChildWindows(mainHwnd, getIEServer, ieServers)
            
    if len(ieServers) > 0:
                ieServer 
    = ieServers[0]
                msg 
    = win32gui.RegisterWindowMessage('WM_HTML_GETOBJECT')
                ret, result 
    = win32gui.SendMessageTimeout(ieServer, msg, 0, 0, win32con.SMTO_ABORTIFHUNG, 1000)
                ob 
    = pythoncom.ObjectFromLresult(result, pythoncom.IID_IDispatch, 0)
                doc 
    = win32com.client.dynamic.Dispatch(ob)

                
    print doc.url
                doc.all[
    'id'].click()

        
    #pythoncom.CoUninitialize()
    复制代码


    多线程操作

    IHTMLDocument2是线程安全的,默认情况下不能在多线程中使用,否则会抛异常。但是在具体使用过程中,又必须使用多线程。解决办法就是上面的代码中的:
    # Important for multithreading
    sys.coinit_flags = 0 # pythoncom.COINIT_MULTITHREADED

    这句必须在开头的时候设定,同时,不要再显示调用pythoncom.CoInitializeEx(0)和 pythoncom.CoUninitialize()。

    参考:http://bytes.com/topic/python/answers/26897-multithreaded-com-server-problem

    IHTMLDocument2 接口

    IHTMLDocument2接口有哪些方法,可以查询http://msdn.microsoft.com/en-us/library/aa752574%28VS.85%29.aspx

    基本能够满足自动化测试的需要,可以在此基础上封装出更易使用的自动化UI测试框架。 

    作者:CoderZhCoderZh的技术博客 - 博客园
    微博:http://t.sina.com.cn/coderzh 
    出处:http://coderzh.cnblogs.com
    文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    8.Eclipse中创建Maven Web项目
    spin_lock & mutex_lock的差别?
    如花搞笑图片集锦(转贴)
    二分查找
    WebStorm 7.0 注冊码
    Sphinx/Coreseek 4.1 跑 buildconf.sh 一个错误,无法生成configure档
    可变长度结构
    于linux已安装moodle
    采用WindowManager添加您自己的自定义视图
    mysql1130远程连接没有权限解决方法
  • 原文地址:https://www.cnblogs.com/qq78292959/p/2965998.html
Copyright © 2020-2023  润新知