LDTP doc: 

https://ldtp.freedesktop.org/user-doc/

对于 web 自动化,我们用 Selenium, 但是对于 windows 控件,我们可以使用 LDTP。

首先,需要引用的 jar 包。

CobraWinLDTP-3.0.0.msi (这个是需要安装的,安装到 C:\Program Files (x86)\VMware\CobraWinLDTP, 而核心的文件就是
CobraWinLDTP.exe。也就是它真正操作了 windows 控件。) 

commons-codec-1.6.jar
commons-logging-1.1.2.jar
LDTP.jar
ws-commons-util-1.0.2.jar
xmlrpc-client-3.1.3.jar
xmlrpc-common-3.1.3.jar

上面第一个是安装 vmware 的 LDTP。

Ldtp不需要安装 python,也不需要安装 jep,它只需要外部有 CobraWinLDTP.exe,并按照 client-server 的方式工作。ldtp.jar是client,先通过启动进程的方式运行CobraWinLDTP.exe,然后通过xmlrpc协议,把java的命令变成调用CobraWinLDTP.exe的命令,从而可以识别控件、操纵控件

(对,java调用pywinauto时,需要依赖jep这个桥梁来把java的命令变成python端的,jep就是负责传递命令的)

由于 CobraWinLDTP.exe 是 server 端,所以先需要在命令行中启动 CobraWinLDTP.exe。

然后看代码:

package ldtp;

import com.cobra.ldtp.Ldtp;

public class TestLdtp {
    public static void main(String[] args) {
        Ldtp ldtp = new Ldtp("abc");
        String[] wins = ldtp.getWindowList();
        for (String win : wins)
        {
            System.out.println(win);
        }
    }
}

====打印结果====

paneTaskbar
frmEclipse SDK
frm?????? - ??? - Mozilla Firefox
frmNew Tab
frmWeChat
frmD:\EclipseSpaceNew\LdtpTestNew\lib
frmC:\Program Files (x86)\VMware\CobraWinLDTP
frmAdministrator: Command Prompt - CobraWinLDTP.exe
frmUntitled - Paint
lst0
paneProgram Manager

上面代码中的 "abc" 是随便一个名字。这段代码可以打印出所有的 frame。然后你找到你需要的,就可以继续操作了。

下面是打开 notepad 后一些操作的代码

package ldtp;

import com.cobra.ldtp.Ldtp;

public class TestLdtp {
    public static void main(String[] args) {
        String winStr = "frmUntitled - Notepad"; //Open Notepad first please
        Ldtp ldtp = new Ldtp(winStr);
        String[] wins = ldtp.getWindowList(); //Print all windows
        for (String win : wins)
        {
            System.out.println(win);
        }
        ldtp.activateWindow(winStr);
        System.out.println("=================");
        String[] objects = ldtp.getObjectList(); //Print all objects
        for (String ob : objects)
        {
            System.out.println(ob);
        }
//        ldtp.click("mnuView"); //This can click the View menu
        ldtp.selectMenuItem("View;Status Bar"); //Click View > Status Bar
        ldtp.appendText("txtTextEditor", "hello allen");
    }
}

====打印结果====
paneTaskbar
frmEclipse SDK
frmUntitled - Notepad
frm?????? - ??? - Mozilla Firefox
frmNew Tab
frmslc12dkq-16-2012-OBIEEServer - Remote Desktop Connection Manager v2.2
frmD:\sw\UIAVerify2.0_x86
frmNow Playing
frmAdministrator: Command Prompt - CobraWinLDTP.exe
frmD:\00????
pane1
pane2
paneChatContactMenu
lst0
paneProgram Manager
=================
txtTextEditor
uknVertical
btnLineup
btnLinedown
uknHorizontal
btnColumnleft
btnColumnright
ukn2
ukn3
lbl0
lblLn1,Col1
ukn4
mnuSystem
mnuSystem1
btnMinimize
btnMaximize
btnClose
mnuApplication
mnuFile
mnuEdit
mnuFormat
mnuView
mnuHelp

关于 LDTP 操纵 windows 控件。的更多相关文章

  1. 在web中使用windows控件,实现摄像头功能

    最近做的一个Web版的视频会议项目,需要在网页中播放来自远程摄像头采集的实时视频,我们已经有了播放远程实时视频的使用C#编写的windows控件,如何将其嵌入到网页中去了?这需要使用一种古老的技术,A ...

  2. 在Web中使用Windows控件

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+] 将Net控件转化为ActiveX控件 1GUID 2实现IObjectSafety接口 3程序集设定 制作安装程序 Web集 ...

  3. 向ArcGIS的ToolBarControl中添加任意的windows控件的方法

    概要:在使用ArcEngine开发中,给ToolbarControl添加按钮形式的命令项相信大家都很熟悉了,因为网上的例子很多.但这种使用click调用功能的方式只能满足大部分用户在体验方面的需求,除 ...

  4. ArcGIS ElementLayer上放置Windows控件

    ElementLayer是ArcGIS API for Silverlight/WPF中的一种图层类型,主要用来承载Silverlight/WPF中的UIElement对象(UIElement),使用 ...

  5. 在Web中如何使用Windows控件(ActiveX)[转]

    最近做的一个Web项目,需要在网页中播放摄像头采集的实时视频,我们已经有了播放视频的使用C#编写的windows控件,如何将其嵌入到网页中去了?这需要使用一种古老的技术,ActiveX. 1.将.Ne ...

  6. Delphi对象变成Windows控件的前世今生(关键是设置句柄和回调函数)goodx

    ----------------------------------------------------------------------第一步,准备工作:预定义一个全局Win控件变量,以及一个精简 ...

  7. 利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用

    Dixon 原文  用ArcGIS Engine.VS .NET和Windows控件开发GIS应用     此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署 ...

  8. [修正] Berlin Firemonkey Windows 控件左方显示虚线问题

    说明:在 Wndows 显示时,有时控件左方会显示一条虚线 适用:Berlin Firemonkey 修正方法: 请将源码 FMX.Platform.Win.pas 复制到自己的工程目录里,再进行修改 ...

  9. windows控件理论学习

    mmp快考试了还在浪 一.对话框编辑器创建控件 1.使用new在堆上创建,系统结束时我们需要使用delete去销毁控件 2.对话框编辑器控件,程序结束,自动销毁 二.控件类的基类 CWnd类和消息映射 ...

随机推荐

  1. 自己实现JDK动态代理

    实验的目录结构 1.JDK动态代理 先来一段jdk动态代理的demo,首先创建一个接口,Person public interface Person { public void eat(); } 实现 ...

  2. C语言的unsigned做双目运算符的奇怪问题

    首先看代码: #include <stdio.h> void main() { ; unsigned ; ) { printf("%d-%d=%d,大于0", num1 ...

  3. Hive分区表创建、分类

    一.分区表创建与说明 必须在表定义时创建partition a.单分区建表语句:create table day_table (id int, content string) partitioned ...

  4. lxml:底层C语言实现、高效地处理html

    介绍 lxml也是一个用于筛选指定html内容的模块,pyquery就是基于lxml. 使用lxml主要需要了解xpath xpath语法 /:在子节点里面找 //:在子子孙孙节点里面找 //div: ...

  5. 小黄车ofo法人被限制出境,它究竟还能撑多久?

    因为季节的原因,现在正是骑车的好时候,而且北京也开通了一条自行车的专用路.但就是在这么好的时候,我们发现,路边的小黄车却越来越少了,而且它的麻烦还不断! ofo法人被限制出境 6月12日消息,据上海市 ...

  6. Linux配置iSCSI存储

    1.基础知识 1.1 存储相关     直接存储(DAS):例如本机上的磁盘,就是属于直接存储设备.     存储区域网络(SAN):来自网络内的其他存储设备提供的磁盘.Iscsi就是属于该方式.   ...

  7. composer问题集锦

    问题一:composer遇到Your configuration does not allow connection to 解决方案: 设置一个本地或全局的composer配置: composer c ...

  8. 05-spring框架—— Spring 事务

    5.1 Spring 的事务管理 事务原本是数据库中的概念,在 Dao 层.但一般情况下,需要将事务提升到业务层,即 Service 层.这样做是为了能够使用事务的特性来管理具体的业务. 在 Spri ...

  9. JAVA项目中的常用的异常处理情况总结

    可能遇见的异常或错误: 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的.例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略. 运行时异常: ...

  10. volatile关键字解决线程间内存共享变量同步的问题,让变量可以立即同步。