【问题标题】:Extract text from X11 GUIs?从 X11 GUI 中提取文本?
【发布时间】:2011-08-10 23:27:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: user-interface testing x11


    【解决方案1】:

    最好的方法是让你的程序使用一个可访问性框架,比如ATK(在 GTK 应用程序中使用),然后使用它来查询字符串,就像屏幕阅读器必须用于 text-to-语音翻译。这是Linux Desktop Testing Project 和dogtail 测试框架采用的方法。您可以使用现有的、经过良好测试的代码并使您的应用程序更适合残疾用户使用(这可能是美国《美国残疾人法案》和许多其他国家/地区的类似法律所要求的)。

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

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

    【讨论】:

    • 谢谢。 Dogtail 是一个不错的小工具,看起来很有用。我带它去散步,做了一些脚本,并且可以用它驱动 gcalctool 和 gedit 等。但是我自己的应用程序没有出现在 AT-SPI 浏览器中,我也不能用 dogtail 驱动它。似乎我还有更多工作可以让我的应用程序可访问,无论如何这并不是一件坏事。现在我知道我的下一步了……
    • 你会说ATK仍然是最有前途的项目吗?你真的是说拦截应用程序的 X11 API 请求以进行字符串渲染是从单独的、独立的 X11 客户端应用程序获取这些字符串(及其边界框)的唯一选择吗?!
    • @matanster:是的,atk 仍然是我所知道的最佳选择,因为这些天来,向 X 服务器发送字符串的 X11 应用程序越来越少,大多数发送预渲染的文本图像,不给你任何拦截。
    【解决方案2】:

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

    【讨论】:

    • 谢谢。 listres 是一个有用的小工具;我以前没见过。但它没有显示我的应用程序中的任何文本字符串。这可能是因为我没有将每个字符串作为单独的资源。
    • @Spook,哦,我以为你在使用某种工具包。我猜 Perl/Tk 不使用资源。
    猜你喜欢
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2012-06-11
    相关资源
    最近更新 更多