Python操作IHTMLDocument2用于自动化测试

简介: 有些软件的界面采用Win32窗口嵌套一个IE控件,用Spy++只能识别出一个Internet Explorer_Server控件。常用的几个API函数无法取到IE控件里面的内容,更无法对里面的控件进行操作,所以这给自动化带来了麻烦。
有些软件的界面采用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测试框架。 

技术改变世界! --狂诗绝剑
目录
相关文章
|
2月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
128 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
1月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
2月前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
49 1
|
2月前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
|
3月前
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。
|
4月前
|
Web App开发 测试技术 持续交付
自动化测试的利器:Selenium与Python的完美结合
【9月更文挑战第21天】在软件开发的世界里,测试是确保产品质量的关键步骤。随着敏捷开发和持续集成的流行,自动化测试工具变得尤为重要。本文将介绍如何使用Selenium和Python进行高效的自动化测试,不仅提供代码示例,还深入探讨如何设计测试用例、选择正确的测试框架、以及如何整合到CI/CD流程中。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。
61 3
|
4月前
|
安全 JavaScript 前端开发
自动化测试的魔法:如何用Python编写你的第一个测试脚本
【8月更文挑战第41天】在软件的世界里,质量是王道。而自动化测试,就像是维护这个王国的骑士,确保我们的软件产品坚不可摧。本文将引导你进入自动化测试的奇妙世界,教你如何使用Python这把强大的魔法杖,编写出能够守护你代码安全的第一道防护咒语。让我们一起开启这场魔法之旅吧!
|
4月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:如何用Selenium和Python打造高效测试脚本
【9月更文挑战第13天】在软件开发的海洋中,自动化测试是那抹不可或缺的亮色。它不仅提升了测试效率,还保障了产品质量。本文将带你领略使用Selenium和Python构建自动化测试脚本的魅力所在,从环境的搭建到脚本的编写,再到问题的排查,每一步都是对软件质量把控的深刻理解和实践。让我们开始这段探索之旅,解锁自动化测试的秘密吧!
88 0
|
4月前
|
jenkins 测试技术 持续交付
自动化测试的高效之路:如何利用Python进行Web应用测试
【9月更文挑战第13天】在软件开发的快节奏中,自动化测试是确保质量和效率的关键。本文将引导你了解如何使用Python语言及其强大的测试框架来提升Web应用的测试效率。我们将一起探索编写简洁而强大的测试脚本的技巧,以及如何通过持续集成(CI)实现自动化测试流程。准备好让你的测试工作飞一般的感觉!
|
7月前
|
存储 NoSQL Redis
Python—操作redis的一些心得
Python—操作redis的一些心得
33 0

热门文章

最新文章