qt4i.icontrols Package¶
iOS基础UI控件模块
-
class
qt4i.icontrols.ActionSheet(root, locator=None, **ext)¶ -
UIActionSheet弹出框
ActionSheet上面的所有按钮
点击text对应的按钮
参数: text (str) – 按钮上的文本
-
class
qt4i.icontrols.Alert(root, locator="/classname='UIAAlert' & maxdepth = 20", **ext)¶ -
弹出框
由于弹出框在iOS不同版本中的UI逻辑不一致(QPath不同),但业务逻辑相对统一(确定/取消),故单独封装成一个类
Alert控件上的所有按钮
点击指定文本的按钮
参数: text (str) – 按钮上的文本
-
title¶ 提示文本内容
-
class
qt4i.icontrols.Button(root, locator, **ext)¶ -
Button控件
-
class
qt4i.icontrols.Cell(element, locators={})¶ 基类:
objectTableCell控件
-
class
qt4i.icontrols.ControlContainer¶ 基类:
object控件集合接口
-
Controls¶ 返回子控件集合 - 示例:XX_Window.Controls[‘XX_按钮’].click()
-
clearLocator()¶ 清空控件定位参数
-
hasControlKey(control_key)¶ 是否包含控件control_key
参数: control_key (str) – 控件名 返回类型: boolean
-
isChildCtrlExist(childctrlname, timeout={'interval': 0.005, 'timeout': 2.0})¶ 判断子控件是否存在
参数: childctrlname (str) – 控件名 返回类型: boolean
-
updateLocator(locators)¶ 更新控件定位参数
参数: locators (dict) – 定位参数,格式是 {‘控件名’:{‘type’:控件类, 控件类的参数dict列表}, …}
-
-
class
qt4i.icontrols.Element(root, locator, **ext)¶ 基类:
qt4i.icontrols.ControlContainer控件(UI框架是由各种控件组合而成)
-
children¶ 获取子控件(仅含相对本控件的第二层子控件,不含第三层以及更深层的子控件,建议用此方法解决动态Path的场景)
返回: [Element, …] 返回类型: list
-
click(offset_x=None, offset_y=None)¶ 点击控件
参数: - offset_x (float or None) – 相对于该控件的坐标offset_x,百分比( 0 -> 1 ),不传入则默认该控件的中央
- offset_y (float or None) – 相对于该控件的坐标offset_y,百分比( 0 -> 1 ),不传入则默认该控件的中央
-
double_click(offset_x=0.5, offset_y=0.5)¶ 双击控件
参数: - offset_x (float) – 相对于该控件的坐标offset_x,百分比( 0 -> 1 ),不传入则默认该控件的中央
- offset_y (float) – 相对于该控件的坐标offset_y,百分比( 0 -> 1 ),不传入则默认该控件的中央
-
drag(from_x=0.9, from_y=0.5, to_x=0.1, to_y=0.5, duration=0.5)¶ 回避控件边缘,在控件体内拖拽(默认在控件内从右向左拖拽)
参数: - from_x (float) – 起点 x偏移百分比(从左至右为0.0至1.0)
- from_y (float) – 起点 y偏移百分比(从上至下为0.0至1.0)
- to_x (float) – 终点 x偏移百分比(从左至右为0.0至1.0)
- to_y (float) – 终点 y偏移百分比(从上至下为0.0至1.0)
- duration (float) – 持续时间(秒)
-
drag2(direct='Left')¶ 回避边缘在控件体内拖拽
参数: direct (EnumDirect.Left|EnumDirect.Right|EnumDirect.Up|EnumDirect.Down) – 拖拽的方向
-
enabled¶ 控件是否开启
返回类型: boolean
-
exist()¶ 控件是否存在
返回类型: boolean
-
find_elements(locator)¶ 通过相对于当前父对象的Path搜索子孙控件(建议用此方法解决动态Path的场景)
参数: locator (QPath | str) – 相对当前对象的 - 子Path对象 或 子Path字符串 (搜索的起点为当前父对象) 返回: [Element, …] 返回类型: list
-
first_with_predicate(predicate)¶ 通过predicate文本获取第一个匹配的子element
参数: predicate (str) – 预期子element的predicate (例如:“name beginswith ‘xxx’”) 返回类型: Element or None
-
first_with_value_for_key(key, value)¶ 通过匹配指定key的value,获取第一个匹配的子element
参数: - key (str) – key (例如:label、name、value)
- value (str or int) – 对应key的value值
返回类型: Element or None
-
flick(from_x=0.9, from_y=0.5, to_x=0.1, to_y=0.5)¶ 滑动/拂去(默认从右向左回避边缘进行滑动/拂去)该接口比drag的滑动速度快,如果滚动距离大,建议用此接口
参数: - from_x (float) – 起点 x偏移百分比(从左至右为0.0至1.0)
- from_y (float) – 起点 y偏移百分比(从上至下为0.0至1.0)
- to_x (float) – 终点 x偏移百分比(从左至右为0.0至1.0)
- to_y (float) – 终点 y偏移百分比(从上至下为0.0至1.0)
-
flick2(direct='Left')¶ 回避边缘在控件体内滑动/拂去
参数: direct (EnumDirect.Left|EnumDirect.Right|EnumDirect.Up|EnumDirect.Down) – 滑动/拂去的方向
-
force_touch(pressure=1.0, duration=2.0)¶ 3D touch
参数: - pressure (float) – 按压力度(取值:0-1.0)
- duration (float) – 按压持续的时间(单位:秒)
-
get_attr_dict()¶ 获取元素的属性信息,返回字典
返回类型: dict
-
get_metis_view()¶ 返回MetisView
-
label¶ 控件的label
返回类型: str or None
-
long_click(duration=3, offset_x=0.5, offset_y=0.5)¶ 单指长按
参数: - duration (int) – 持续时间(秒)
- offset_x (float) – 相对于该控件的坐标offset_x,百分比( 0 -> 1 ),不传入则默认该控件的中央
- offset_y (float) – 相对于该控件的坐标offset_y,百分比( 0 -> 1 ),不传入则默认该控件的中央
-
name¶ 控件的name
返回类型: str or None
-
print_uitree()¶ 打印当前控件的UI树
-
screenshot(image_path=None, image_type=None)¶ 截屏
Attention: 裁剪图像使用了PIL库,使用该接口请安装Pillow,如下:pip install Pillow
参数: - image_path (str) – 截屏图片的存放路径
- image_path – 截屏图片的存放路径
返回: 截屏结果和截屏文件的路径
返回类型: tuple (boolean, str)
-
scroll_to_visible(rate=1.0, drag_times=20)¶ 自动滚动到元素可见(技巧: Path中不写visible=true,当对象在屏幕可视范围之外,例如底部,调用此方法可以自动滚动到该元素为可见)
参数: drag_times (int) – 最多尝试下滑次数,默认20次
-
send_keys(keys)¶ 输入字符串
参数: keys (str) – 字符串内容 Attention: 该接口不支持中文,中文输入请使用value=’中文’
-
value¶ 控件的value
返回类型: None | str
-
visible¶ 控件是否可见
返回类型: boolean
-
wait_for_exist(timeout, interval)¶ 控件是否存在
参数: - timeout (float) – 超时值(秒),例如对象需要等待网络拉取10秒才出现
- interval (float) – 轮询值(秒),轮询值建议 0.005 秒
返回类型: boolean
-
with_name(name)¶ 通过name文本获取匹配的子elements
参数: name (str) – 子控件的name 返回类型: list
-
with_predicate(predicate)¶ 通过predicate文本获取第一个匹配的子element :param predicate: 预期子element的predicate (例如:“name beginswith ‘xxx’”) :type predicate: str :rtype: Element or None
-
-
class
qt4i.icontrols.MetisView(element)¶ 基类:
object-
click(offset_x=None, offset_y=None)¶ 点击
参数: - offset_x (float or None) – 相对于该控件的坐标offset_x,百分比( 0 -> 1 ),不传入则默认该控件的中央
- offset_y (float or None) – 相对于该控件的坐标offset_y,百分比( 0 -> 1 ),不传入则默认该控件的中央
-
drag(from_x=0.5, from_y=0.5, to_x=0.5, to_y=0.1, duration=0.5)¶ 拖拽
参数: - from_x (float) – 起点 x偏移百分比(从左至右为0.0至1.0)
- from_y (float) – 起点 y偏移百分比(从上至下为0.0至1.0)
- to_x (float) – 终点 x偏移百分比(从左至右为0.0至1.0)
- to_y (float) – 终点 y偏移百分比(从上至下为0.0至1.0)
- duration (float) – 持续时间(秒)
-
os_type¶ 系统类型,例如”android”,”ios”,”pc”
-
rect¶ 元素相对坐标(x, y, w, h)
-
screenshot()¶ 当前容器的区域截图
-
-
class
qt4i.icontrols.PickerWheel(root, locator, **ext)¶ -
滚轮选择框
-
class
qt4i.icontrols.SecureTextField(root, locator, **ext)¶ -
密码输入框
-
class
qt4i.icontrols.Slider(root, locator="/classname='UIASlider' & maxdepth = 20", **ext)¶ -
进度条
-
value¶ 控件的value
返回类型: None | str
-
-
class
qt4i.icontrols.TableView(root, locator=None, **ext)¶ -
TableView控件
-
class
qt4i.icontrols.TextField(root, locator, **ext)¶ -
文本输入框
-
class
qt4i.icontrols.Window(root, locator=None, **ext)¶ -
窗口基类