var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-333696-1']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();
  • 2008年10月10日

    Web自动化(2)

    分类:

    2.     BHO。它依附于MSIEDll文件存在,详见BHO编程

     

    3.     Band Object。也是COM对象存在于容器MSIE中,Tool BandsInternet Explorer包含,Desk BandsShell包含。一个完整的Band Object必须实现IDispatchIObjectWithSiteIDeskBand这三个接口。前两个可以用ATL的默认实现,第三个是从浏览器组件里面来。详见Creating Custom Explorer Bars, Tool Bands, and Desk BandsInternet Explorer Toolbar (Deskband) Tutorial

     

    4.     Windows 上的MSAA/UIA/IAccessible2 Linux上的Accessibility Toolkit(ATK)Assistive Technology Service Provider Interface(AT-SPI),详见ARIA User Agent Implementors GuideWeb accessibilityWeb元素提供有用的信息并能被访问,但大部分网页并没遵守Accessibility指南,而且由于某些Accessibility标准并没有包含全部Web元素(比如MSAA不允许开发员使用SPANDIV标签,虽然MSAADOM平行但严格来讲MSAA只是DOM的子集),最后Accessibility主要用作提供有用的信息而不是提供元素的访问,所以使用此方法的Web自动化工具很少。

     

    5.     使用WebBrowser控件,它对应文件Shdocvw.dll。从MSIE结构图看到,组件Shdocvw.dll寄存在IExplore.exe上,而组件Mshtml.dll又寄存在Shdocvw.dll上。于是,Shdocvw.dll作为强大的ActiveX控件宿主,被作为WebBrowser控件频繁地使用。

     

    接口IDocHostUIHandlerIDocHostUIHandler2IDocHostShowUIICustomDoc提供了对 WebBrowser控件的额外控制,如重写MSIE默认提供的上下文菜单、扩展DHTML对象模型等。方法IDocHostUIHandler::GetExternalCHtmlView::OnGetExternal(MFC)此方法返回指向宿主IDispatch接口,详见Extending the WebBrowser DOM

     

    下面介绍如何使用WebBrowser控件,环境为MFC

    1.     插入ActiveX控件。首先在生成MFC项目时,在”Advanced Features”窗口中确定勾选”ActiveX controls”,相比不选此项这将在项目头文件stdafx.h中增加导入afxdisp.h(MFC Automation),在函数*App::InitInstance()中增加AfxEnableControlContainer()以支持OLE控件对象。在资源中,选中一个Windows Form或者Dialog,右键点击”Insert ActiveX Control”,选择”Microsoft Web Browser”。加入控件后需要生成该控件对应的类,于是,在该控件上右键点击”Add Variable”,确认”Control ID”选中IDC_EXPLORER1”Variable type”则为CExplorer1(VS2008),填入你想要的”Variable name”,点击”OK”后,将生成CExplorer1的类对应你填入的变量名,详见Using MFC to Host a WebBrowser ControlHandling HTML Element Events in MFC applications

    2.     添加ActiveX类。如果不想插入控件,就可以用这个方法。建立勾选”ActiveX controls”的项目后,切换到类视图(Class View),选中项目右键Add->Class,选择”MFC Class From ActiveX Control”,点击Add按钮,出现”Add Class From ActiveX Control Wizard”窗口,确定勾选”Registry”单选钮,在其右边”Availiable ActiveX controls:”下的列表项中选中”Microsoft Web Browser<1.0>”,在interface下选中IWebBrowser2(IWebBrowser已不被赞成使用,虽然接口IWebBrowser2继承自IWebBrowserAppIWebBrowserApp继承自IWebBrowserIWebBrowser继承自IDispatch),添加到右边”Generated classes:”中,VS自动生成类CWebBrowser2,点击”Finish”按钮完成,详见Adding a Class from an ActiveX Control

    3.     使用MFCCHtmlViewCDHtmlDialog。建立MFC工程时,在”Generated Classes”窗口下使得*ViewBase类为CHtmlView,或者使得*DlgBase类为CDHtmlDialog

    分享到:

    历史上的今天:

    James Bach 测试四问 2010年10月10日
    测试的未来? 2007年10月10日