Python操作IHTMLDocument2用於自動化測試

來源:互聯網
上載者:User
有些軟體的介面採用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測試架構。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.