3737 - 屏幕录屏
3838 - 手势操作(点击,滑动,输入,复杂手势)
3939- 支持控件操作
40- - 控件查找(联合查找,模糊查找,相对查找)
40+ - 控件查找(联合查找,模糊查找,相对查找,xpath查找 )
4141 - 控件信息获取
4242 - 控件点击,长按,拖拽,缩放
4343 - 文本输入,清除
@@ -122,7 +122,7 @@ UI 控件树可视化工具,查看控件树层级,获取控件详情。
122122 - [ 息屏] ( #息屏 )
123123 - [ 屏幕解锁] ( #屏幕解锁 )
124124 - [ Key Events] ( #key-events )
125- - [ 执行hdc ] ( #执行hdc )
125+ - [ 执行 HDC 命令 ] ( #执行-hdc-命令 )
126126 - [ 打开URL (schema)] ( #打开url-schema )
127127 - [ 文件操作] ( #文件操作 )
128128 - [ 屏幕截图] ( #屏幕截图 )
@@ -136,17 +136,23 @@ UI 控件树可视化工具,查看控件树层级,获取控件详情。
136136 - [ 输入] ( #输入 )
137137 - [ 复杂手势] ( #复杂手势 )
138138 - [ 控件操作] ( #控件操作 )
139- - [ 控件选择器] ( #控件选择器 )
140- - [ 控件查找] ( #控件查找 )
141- - [ 控件信息] ( #控件信息 )
142- - [ 控件数量] ( #控件数量 )
143- - [ 控件点击] ( #控件点击 )
144- - [ 控件双击] ( #控件双击 )
145- - [ 控件长按] ( #控件长按 )
146- - [ 控件拖拽] ( #控件拖拽 )
147- - [ 控件缩放] ( #控件缩放 )
148- - [ 控件输入] ( #控件输入 )
149- - [ 文本清除] ( #文本清除 )
139+ - [ 常规选择器] ( #常规选择器 )
140+ - [ 控件查找] ( #控件查找 )
141+ - [ 控件信息] ( #控件信息 )
142+ - [ 控件数量] ( #控件数量 )
143+ - [ 控件点击] ( #控件点击 )
144+ - [ 控件双击] ( #控件双击 )
145+ - [ 控件长按] ( #控件长按 )
146+ - [ 控件拖拽] ( #控件拖拽 )
147+ - [ 控件缩放] ( #控件缩放 )
148+ - [ 控件输入] ( #控件输入 )
149+ - [ 文本清除] ( #文本清除 )
150+ - [ XPath选择器] ( #xpath选择器 )
151+ - [ xpath控件是否存在] ( #xpath控件是否存在 )
152+ - [ xpath控件点击] ( #xpath控件点击 )
153+ - [ xpath控件双击] ( #xpath控件双击 )
154+ - [ xpath控件长按] ( #xpath控件长按 )
155+ - [ xpath控件输入] ( #xpath控件输入 )
150156 - [ 获取控件树] ( #获取控件树 )
151157 - [ 获取Toast] ( #获取toast )
152158
@@ -291,7 +297,6 @@ d.set_display_rotation(DisplayRotation.ROTATION_180)
291297```
292298
293299
294-
295300### Home
296301``` python
297302d.go_home()
@@ -324,7 +329,7 @@ d.press_key(KeyCode.POWER)
324329详细的Key code请参考 [ harmony key code] ( https://github.com/codematrixer/hmdriver2/blob/4d7bceaded947bd63d737de180064679ad4c77b8/hmdriver2/proto.py#L133 )
325330
326331
327- ### 执行hdc
332+ ### 执行 HDC 命令
328333``` python
329334data = d.shell(" ls -l /data/local/tmp" )
330335
@@ -488,7 +493,7 @@ d.click(x, y)
488493
489494## 控件操作
490495
491- ### 控件选择器
496+ ### 常规选择器
492497控件查找支持这些` by ` 属性
493498- ` id `
494499- ` key `
@@ -506,6 +511,7 @@ d.click(x, y)
506511- ` isBefore `
507512- ` isAfter `
508513
514+ Notes: 获取控件属性值可以配合 [ UI inspector] ( https://github.com/codematrixer/ui-viewer ) 工具查看
509515
510516** 普通定位**
511517``` python
@@ -537,7 +543,7 @@ d(text="showToast", isAfter=True)
537543d(id = " drag" , isBefore = True )
538544```
539545
540- ### 控件查找
546+ #### 控件查找
541547结合上面讲的控件选择器,就可以进行元素的查找
542548``` python
543549d(text = " tab_recrod" ).exists()
@@ -550,7 +556,7 @@ d(text="tab_recrod").find_component()
550556# 当没找到返回None
551557```
552558
553- ### 控件信息
559+ #### 控件信息
554560
555561``` python
556562d(text = " tab_recrod" ).info
@@ -603,7 +609,7 @@ d(text="tab_recrod").boundsCenter
603609```
604610
605611
606- ### 控件数量
612+ #### 控件数量
607613``` python
608614d(type = " Button" ).count # 输出当前页面`type`为Button的元素数量
609615
@@ -612,7 +618,7 @@ len(d(type="Button"))
612618```
613619
614620
615- ### 控件点击
621+ #### 控件点击
616622``` python
617623d(text = " tab_recrod" ).click()
618624d(type = " Button" , text = " tab_recrod" ).click()
@@ -624,20 +630,20 @@ d(text="tab_recrod").click_if_exists()
624630- ` click ` 如果元素没找到,会报错` ElementNotFoundError `
625631- ` click_if_exists ` 即使元素没有找到,也不会报错,相当于跳过
626632
627- ### 控件双击
633+ #### 控件双击
628634``` python
629635d(text = " tab_recrod" ).double_click()
630636d(type = " Button" , text = " tab_recrod" ).double_click()
631637```
632638
633- ### 控件长按
639+ #### 控件长按
634640``` python
635641d(text = " tab_recrod" ).long_click()
636642d(type = " Button" , text = " tab_recrod" ).long_click()
637643```
638644
639645
640- ### 控件拖拽
646+ #### 控件拖拽
641647``` python
642648from hmdriver2.proto import ComponentData
643649
@@ -649,7 +655,7 @@ d(type="ListItem").drag_to(componentB)
649655```
650656` drag_to ` 的参数` component ` 为` ComponentData ` 类型
651657
652- ### 控件缩放
658+ #### 控件缩放
653659``` python
654660# 将元素按指定的比例进行捏合缩小1倍
655661d(text = " tab_recrod" ).pinch_in(scale = 0.5 )
@@ -660,16 +666,54 @@ d(text="tab_recrod").pinch_out(scale=2)
660666其中` scale ` 参数为放大和缩小比例
661667
662668
663- ### 控件输入
669+ #### 控件输入
664670``` python
665671d(text = " tab_recrod" ).input_text(" abc" )
666672```
667673
668- ### 文本清除
674+ #### 文本清除
669675``` python
670676d(text = " tab_recrod" ).clear_text()
671677```
672678
679+ ### XPath选择器
680+ xpath选择器基于标准的xpath规范,也可以使用` //*[@属性="属性值"] ` 的样式(xpath lite)
681+ ``` python
682+ d.xpath(' //root[1]/Row[1]/Column[1]/Row[1]/Button[3]' )
683+ d.xpath(' //*[@text="showDialog"]' )
684+ ```
685+
686+ 控件xpath路径获取可以配合 [ UI inspector] ( https://github.com/codematrixer/ui-viewer ) 工具查看
687+
688+ #### xpath控件是否存在
689+ ``` python
690+ d.xpath(' //*[@text="showDialog"]' ).exists() # 返回True/False
691+ d.xpath(' //root[1]/Row[1]/Column[1]/Row[1]/Button[3]' ).exists()
692+ ```
693+
694+ #### xpath控件点击
695+ ``` python
696+ d.xpath(' //*[@text="showDialog"]' ).click()
697+ d.xpath(' //root[1]/Row[1]/Column[1]/Row[1]/Button[3]' ).click_if_exists()
698+ ```
699+ 以上两个方法有一定的区别
700+ - ` click ` 如果元素没找到,会报错` XmlElementNotFoundError `
701+ - ` click_if_exists ` 即使元素没有找到,也不会报错,相当于跳过
702+
703+ #### xpath控件双击
704+ ``` python
705+ d.xpath(' //*[@text="showDialog"]' ).double_click()
706+ ```
707+
708+ #### xpath控件长按
709+ ``` python
710+ d.xpath(' //*[@text="showDialog"]' ).long_click()
711+ ```
712+
713+ #### xpath控件输入
714+ ``` python
715+ d.xpath(' //*[@text="showDialog"]' ).input_text(" adb" )
716+ ```
673717
674718## 获取控件树
675719``` python
0 commit comments