从X11 GUI中提取文本?

时间:2011-08-10 23:27:32

标签: user-interface testing x11

我有一个用Perl / Tk编写的销售点应用程序。我使用X11 :: GUITest对其进行自动测试,通过绑定到按钮和其他小部件的热键驱动应用程序(通常是触摸屏驱动)。但是,X11 :: GUITest没有办法从屏幕上“读取”文本,因此我采用扩充应用程序来编写临时文件以及将数据放在屏幕上。然后测试脚本查看临时文件,而不是GUI。但是我想扩展X11 :: GUITest或者创建一个可以从X11 GUI中删除文本字符串的新CPAN模块。我不是在进行图形到文本转换之后;这是我的(微弱的)理解,在X窗口系统的深处某处,标签文本等存储为文本字符串,并在管道后期(?)呈现为位图形式。

任何人都有关于如何做到这一点的指导,或指导从哪里开始?

是的,我知道我应该坚持更好的MVC分离,而不是实际在GUI级别进行测试,而是低于它;然而,现实阻碍了它,它就是它!

2 个答案:

答案 0 :(得分:1)

程序listres列出小部件中的资源,包括标签文本,我认为文本输入框的内容。您可以直接使用其输出,提取您需要的内容,或者您​​可能需要查看源代码并了解它是如何完成的。

答案 1 :(得分:1)

执行此操作的最佳方法是使您的程序使用可访问性框架(如ATK(在GTK应用程序中使用)),然后使用它来查询字符串,因为屏幕阅读器必须为文本提供 - 语音翻译。这是Linux Desktop Testing Projectdogtail测试框架采用的方法。您可以获得使用现有的,经过良好测试的代码并使您的应用程序更适用于残疾用户的奖励(美国的“美国残疾人法案”和许多其他国家/地区的类似法律可能会要求这样做。)

如果您的应用程序使用现代字体框架,例如libXft2,这可能是您唯一的选择,因为这些字符串仅在客户端应用程序中,而不是X服务器,并且pixmap转换的字符在客户端中完成。 (如果你的文本是抗锯齿的,它必须使用这些而不是传统的X11 API。)

即使使用传统的X11 API,一旦文本到位图转换完成,X服务器也不会存储字符串,因此在这种情况下,没有好的方法可以查询它们。