Skip to content
📔 阅读量:

相对坐标定位

背景

相对坐标定位方案是是一种基于 UI 的元素定位方案,是我们自研的一个使用简单,且效率极高、稳定性好的元素定位方案,基于元素按钮在应用中的相对位置,动态获取元素在当前屏幕中的位置,适用于各种屏幕分辨率(包括高分屏、宽屏、带鱼屏),当元素按钮位置相对于应用界面位置发生修改之后,只需要根据 UI 设计图上的源数据修改对应坐标数据就好,维护非常的方便。

此类元素定位方案适用于一些元素位置相对与应用界面比较固定的应用,比如音乐(99% 的元素定位采用这种,效果非常好),不适用于界面不固定的应用,比如截图录屏,很明显不适用于这类元素定位方案。这种全新的元素定位方案有它的适用条件,如果你发现使用常规的(属性定位、图像定位)不好做时,不妨考虑使用这种,其效果一定能惊讶到你,并且迅速爱上他。

实现原理

在 UI 设计图中我们是可以获取到元素按钮相对于应用边框的距离的,然后我们可以通过技术手段获取到应用界面在当前屏幕中的位置及应用窗口的大小,示意图如下:

(x1, y1)为应用左上角相对于屏幕左上角(0, 0)的位置;(x2, y2)是按钮【播放所有】的左上角相对于应用窗口左上角(x1, y1)的坐标,那么实际上【播放所有】左上角相对于屏幕左上角(0, 0)的位置为:( x1 + x2, y1 + y2 )

是按钮【播放所有】的大小(w2, h2),可以从 UI 设计图上获取;

在 UI 设计稿上点击【播放所有】图标,然后移动鼠标就就可以看到上图的参考线及数据;

所以,我们可以轻松的获取到按钮【播放所有】的中心坐标为:( x1 + x2 + (w2 / 2), y1 + y2 + ( h2 / 2) )

使用说明

配置 ini 文件

基于 UI 的元素定位方案的数据源是应用库中的 ui.ini 配置文件:

ini
;section
[新建歌单+] 
;key = value
direction = left_top
location = 180, 268, 21, 21
  • section 是你根据对应的元素按钮命名,你可以任意命名,但最好有具体含义,且能明确表示这个元素按钮的名称;用中括号括起来就行,比如:[新建歌单+]

  • direction 是配置该元素的参考系,分别为:

    • left_top 左上;

    • left_bottom 左下;

    • right_top 右上;

    • right_bottom 右下;

    参考系的选取标准:拉动改变窗口大小时,元素按钮相对于参考系位置是不变的;

  • location 是该元素按钮的相对与参考系的 (x, y ) 的距离,及大小 (w, h),这四个数据可以通过 UI 设计图上获取数据,在编辑模式下,点击 UI 图上的按钮,右侧就会出现该元素按钮的 x, y, w, h 数据。

如果 UI 图上没有提供你想要的元素数据,你可以直接在系统中使用截图录屏进行尺量,这是一种不推荐但能用的方法。

调用方法

python
import pylinuxauto

pylinuxauto.find_element_by_ui(
    appname="dde-file-manager",
    config_path="~/Desktop/ui.ini",
    btn_name="最大化按钮"
).click()