qt4c.qpath

qpath模块

详见QPath类说明

Module Contents

Classes

EnumQPathKey
EnumUIType
QPath Query Path类,使用QPath字符串定位UI控件

Functions

_find_by_name(root, name)
class qt4c.qpath.EnumQPathKey

Bases: object

MAX_DEPTH = MAXDEPTH
INSTANCE = INSTANCE
UI_TYPE = UITYPE
class qt4c.qpath.EnumUIType

Bases: object

WIN = Win
UIA = UIA
exception qt4c.qpath.QPathError

Bases: Exception

QPath异常类定义

class qt4c.qpath.QPath(qpath_string)

Bases: object

Query Path类,使用QPath字符串定位UI控件

QPath的定义: Qpath ::= Seperator UIObjectLocator Qpath Seperator ::= 路径分隔符,任意的单个字符 UIObjectLocator ::= UIObjectProperty && UIObjectLocator UIObjectProperty ::= UIProperty | RelationProperty | IndexProperty | UITypeProperty UIProperty ::= [Window/UIA/Html]Property Operator “Value” UITypeProperty ::= Win | UIA | Html RelationProperty ::= MaxDepth = “Number”(最大搜索子孙深度) IndexProperty ::= Instance=”Integer”(Integer:找到的多个控件中的第几个(负数表示从后往前数))

Operator ::= ‘=’ | ‘~=’ (‘=’ 表示精确匹配; ‘~=’ 表示用正则表达式匹配)

UI控件基本上都是由树形结构组织起来的。为了方便定位树形结构的节点,QPath采用了路径结构 的字符串形式。 QPath以第一个字符为路径分隔符,如 “/Node1/Node2/Node3”和 “|Node1|Node2|Node3”是一样的路径,都表示先找到Node1,再在Node1的子孙节点里找Node2,然后在Node2的子孙节点里 找Node3。而定位每个Node需要改节点的多个属性以”&&”符号连接起来, 形成 “/Property1=’value1’ && property2~=’value2’ && …”的形式,其中”~=”表示正则匹配。QPath支持的属性包括wincontrols.Window和htmlcontrols.HtmlElement的类属性。QPath中的每个节点都有两个默认属性’UIType’和’MaxDepth’。 “UIType=’Win32|UIA|Html’”,三个取值分别对应了三种QPath支持的UI类型。当UIType没有指定时默认取值为父节点的值。而”MaxDepth”表示该节点离祖先节点的最大深度, 如果没有明确指定时默认取值为’1’,即直接父子关系。QPath还支持”Instance”属性,用于当找到多个节点时指定选择第几个节点。

例子: Qpath =”/ ClassName=’TxGuiFoundation’ && Caption~=’QQd+’ && Instance=’-1’

/ UIType=’UIA’ && name=’mainpanel’ && MaxDepth=’10’”
PROPERTY_SEP = &&
OPERATORS = ['=', '~=']
MATCH_FUNCS
CONTROL_TYPES
update_control_type(self)
_find_controls_recur(self, root, qpath)

递归查找控件

参数:
  • root – 根控件
  • qpath – 解析后的qpath结构
返回:

返回(found_controls, remain_qpath), 其中found_controls是找到的控件,remain_qpath

是未能找到控件时剩下的未能匹配的qpath。

_match_control(self, control, props)

控件是否匹配给定的属性

参数:
  • control – 控件
  • props – 要匹配的控件属性字典,如{‘classname’:[‘=’, ‘window’]}
_parse_property(self, prop_str)

解析property字符串,返回解析后结构

例如将 “ClassName=’Dialog’ ” 解析返回 {ClassName: [‘=’, ‘Dialog’]}

_parse(self, qpath_string)

解析qpath,并返回QPath的路径分隔符和解析后的结构

将例如”| ClassName=’Dialog’ && Caption~=’SaveAs’ | UIType=’UIA’ && ControlID=’123’ && Instanc=’-1’” 的QPath解析为下面结构:[{‘ClassName’: [‘=’, ‘Dialog’], ‘Caption’: [‘~=’, ‘SaveAs’]}, {‘UIType’: [‘=’, ‘UIA’], ‘ControlID’: [‘=’, ‘123’], ‘Instance’: [‘=’, ‘-1’]}]

参数:qpath_string – qpath 字符串
返回:(seperator, parsed_qpath)
__str__(self)

返回格式化后的QPath字符串

getErrorPath(self)

返回最后一次QPath.search搜索未能匹配的路径

返回类型:string
search(self, root=None)

根据qpath和root查找控件

参数:root (实例类型) – 查找开始的控件
返回:返回找到的控件列表
qt4c.qpath._find_by_name(root, name)