有些软件的界面采用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测试框架。

本文转自CoderZh博客园博客,原文链接:http://www.cnblogs.com/coderzh/archive/2010/05/05/python-IHTMLDocument2-automation.html,如需转载请自行联系原作者

Python操作IHTMLDocument2用于自动化测试相关推荐

  1. Python编程语言学习:for循环实现对多个不同的DataFrame数据执行相同操作(可用于对分开的测试集、训练集实现执行相同逻辑任务)

    Python编程语言学习:for循环实现对多个不同的DataFrame数据执行相同操作(可用于对分开的测试集.训练集实现执行相同逻辑任务) 目录

  2. python接口测试_Python接口自动化测试框架实战开发(一)

    目录 一丶叙述 二丶接口基础知识 三丶接口测试工具 四丶Fiddler的使用 五丶unittest使用 六丶mock服务入门到实战 七丶接口自动化框架设计到开发 一丶叙述 1.项目介绍 整个项目分为四 ...

  3. Python+uiautomator2手机UI自动化测试实战

    Python+uiautomator2手机UI自动化测试实战 -- 2.(原文地址):https://blog.csdn.net/ricky_yangrui/article/details/81415 ...

  4. python测试框架untest_python自动化测试框架unittest

    对于刚学习python自动化测试的小伙伴来说,unittest是一个非常适合的框架: 通过unittest,可以管理测试用例的执行,自动生成简单的自动化测试报告: 首先我们尝试编写编写一个最简单的un ...

  5. python 钉钉机器人发送图片,python操作钉钉机器人发送各种消息

    python操作钉钉机器人发送各种消息 python操作钉钉机器人发送各种消息 使用python,操作钉钉群聊机器人发送消息 环境:python3.x 使用模块:requests,json 钉钉机器人 ...

  6. Python +Appium 实现app自动化测试

    Python +Appium 实现app自动化测试 一.Appium简介 Appium是一款开源工具,用于自动化iOS.Android和Windows桌面平台上的本地.移动web和混合应用程序.原生应 ...

  7. Linux下Appium+Python+headless移动APP自动化测试实战

    Linux下Appium+Python+Headless移动APP自动化测试实战 文章目录 Linux下Appium+Python+Headless移动APP自动化测试实战 1. 环境准备 1.1 安 ...

  8. Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  9. Python操作Redis及连接方式

    前沿:随着互联网的高速发展,数据变得越来越重要,Python成为了人工智能的热门语言,而Nosql数据库已成为日常开发用品. 今天要写的是Python操作Redis Redis的安装我就不介绍了,你可 ...

  10. python操作文件和目录_Python操作文件和目录

    Python操作文件和目录 读写文件比较简单,有一点特别注意就好了 windows下Python默认打开的文件以gbk解码,而一般我们的文件是utf-8编码的,所以如果文本含有中文,就会出现异常或者乱 ...

最新文章

  1. Linux学习总结(七十)docker-2
  2. ACM入门之【快速幂】
  3. javascript:重新加载js文件
  4. java windows 下载_Windows环境下JDK的下载与安装
  5. DBShop电子商务系统
  6. do sb suggest to_suggest sb to do还是doing
  7. jmeter tps指标在哪里看_性能之路——性能测试连载 (3)-性能指标
  8. 剖析 AI 和大数据的分布式实践 —— 2018 UCan下午茶·北京站
  9. MySQL添加唯一约束和联合唯一约束(建表后添加)
  10. 靠知识赚钱只是较高级的体力劳动,靠智慧赚钱才能真正的富有。
  11. Hyperscan 5.4.0 安装教程 (CentOS7环境)
  12. html怎么加入页面登录背景,HTML+CSS实现动态背景登录页面
  13. 深层理解-栈平衡原理
  14. python毕业设计总结范文大全_毕业论文设计总结范文.docx
  15. 转:普通继电器和自锁继电器的差别
  16. matlab plotyy 标注,Matlab关于plotyy 标注 legend 的问题
  17. 贵州贵安新区试点大数据精准扶贫运营管理
  18. Excel单元格插入图片,并自适应宽高——保姆级教程
  19. logging日志写入文件
  20. 小米摄像机 nas网络存储 群晖nas

热门文章

  1. Atitit  J2EE平台相关规范--39个  3.J2SE平台相关规范--42个
  2. Atitit.研发管理软件公司的软资产列表指南
  3. atitit.高性能遍历 文本文件行 attilax总结
  4. (转)好的投资应当是:善良为先,智慧为道,奋斗为本
  5. (转)Rust :文件分层
  6. 【TSP】基于matlab禁忌搜索算法求解31城市旅行商问题【含Matlab源码 1143期】
  7. 【语音分离】基于matlab FASTICA语音分离【含Matlab源码 1023期】
  8. 【滤波器】基于matlab升余弦滤波器【含Matlab源码 993期】
  9. 【缺陷检测】基于matlab形态学水果蔬菜缺陷检测【含Matlab源码 820期】
  10. 【数字信号】基于matlab GUI DTMF双音多频电话拨号仿真【含Matlab源码 805期】