Some software interfaces use Win32 windows to nest an IE control. With spy ++, only one Internet assumer_server control can be identified. Several common API functions cannot obtain the content in the IE control, and cannot operate the control in the control. Therefore, automation is troublesome. This article describes how to use python to obtain the ihtmldocument2 interface for automated testing.
Get ihtmldocument2 Interface
Reference: http://support.microsoft.com/kb/249232
The corresponding Python implementation code is as follows :#! /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 assumer_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 () multi-thread operation
Ihtmldocument2 is thread-safe and cannot be used in multiple threads by default. Otherwise, an exception is thrown. However, multithreading is required during the specific use process. The solution is in the above Code: # important for Multithreading
SYS. coinit_flags = 0 # pythoncom. coinit_multithreaded
This statement must be set at the beginning, and do not display calls to pythoncom. coinitializeex (0) and pythoncom. couninitialize ().
Reference: http://bytes.com/topic/python/answers/26897-multithreaded-com-server-problem
Ihtmldocument2 Interface
Ihtmldocument2 interface what methods can be queried http://msdn.microsoft.com/en-us/library/aa752574%28VS.85%29.aspx
It can basically meet the needs of automated testing. On this basis, it can encapsulate an easy-to-use automated UI testing framework.
Author: coderzh (coderzh's technology blog-Blog)
Weibo: http://t.sina.com.cn/coderzh
Source: http://coderzh.cnblogs.com
The copyright of this article is owned by me. You are welcome to repost it. However, you must keep this statement without the author's consent and provide a clear link to the original article on the article page. Otherwise, you will be entitled to pursue legal liability.
Some software interfaces use Win32 windows to nest an IE control. With spy ++, only one Internet assumer_server control can be identified. Several common API functions cannot obtain the content in the IE control, and cannot operate the control in the control. Therefore, automation is troublesome. This article describes how to use python to obtain the ihtmldocument2 interface for automated testing.
Get ihtmldocument2 Interface
Reference: http://support.microsoft.com/kb/249232
The corresponding Python implementation code is as follows :#! /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 assumer_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 () multi-thread operation
Ihtmldocument2 is thread-safe and cannot be used in multiple threads by default. Otherwise, an exception is thrown. However, multithreading is required during the specific use process. The solution is in the above Code: # important for Multithreading
SYS. coinit_flags = 0 # pythoncom. coinit_multithreaded
This statement must be set at the beginning, and do not display calls to pythoncom. coinitializeex (0) and pythoncom. couninitialize ().
Reference: http://bytes.com/topic/python/answers/26897-multithreaded-com-server-problem
Ihtmldocument2 Interface
Ihtmldocument2 interface what methods can be queried http://msdn.microsoft.com/en-us/library/aa752574%28VS.85%29.aspx
It can basically meet the needs of automated testing. On this basis, it can encapsulate an easy-to-use automated UI testing framework.