summaryrefslogtreecommitdiff
path: root/python-adbui.spec
blob: fcb008522bf5df43cda17df69e9cfe14236e78ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
%global _empty_manifest_terminate_build 0
Name:		python-adbui
Version:	4.5.19
Release:	1
Summary:	adbui 所有的功能都是通过 adb 命令,adbui 的特色是可以通过 xpath,ocr 获取 ui 元素。
License:	MIT
URL:		https://github.com/hao1032/adbui
Source0:	https://mirrors.nju.edu.cn/pypi/web/packages/ef/a1/e970d63a34ead65ff4139292aef9bf73495a5643138cb70a9e914fd37f52/adbui-4.5.19.tar.gz
BuildArch:	noarch


%description
# 常见问题
- adbui 交流微信群,加 hao1032,备注 adbui,会拉入微信群
- 使用 ocr 提示出错,请在该页面最后查看使用 ocr 示例


# adbui
adbui 所有的功能都是通过 adb 命令,adbui 的特色是可以通过 xpath,ocr 获取 ui 元素。

## 安装
    pip install adbui

## 要求
- 在命令中可以使用 adb 命令,即adb已经配置到环境变量
- adb 的版本最好是 >= 1.0.39,用老版本的 adb 可能会有一些奇怪的问题
- 依赖的库:lxml 解析 xml,requests 发 ocr 请求,pillow 图片处理

## 说明
- adbui 当前还在完善,bug 和建议请直接在 github 反馈
- 主要在 win7,python3 环境使用,其他环境可能有问题


## import and init
    from adbui import Device

    d = Device('123abc')  # 手机的sn号,如果只有一个手机可以不写


## adbui 可以分为 3 个部分
**util 负责执行完整的命令**

  - **cmd** 用来执行系统命令
  
        d.util.cmd('adb -s 123abc reboot')
        out = d.util.cmd('ping 127.0.0.1')
    
  - **adb** 用来执行 adb 命令
  
        d.util.adb('install xxx.apk')
        d.util.adb('uninstall com.tencent.mtt')
    
  - **shell** 用来执行 shell 命令
  
        d.util.shell('pm clear com.tencent.mtt')
        d.util.shell('am force-stop com.tencent.mtt')

**adb_ext 对常用 adb 命令的封装,下面列出部分操作(可在 adbui/adb_ext.py 文件自行增加需要的操作)**

  - **screenshot**
   
        d.adb_ext.screenshot() # 截图保存到系统临时目录,也可指定目录
        
  - **click**
  
        d.adb_ext.click(10, 32)  # 执行一个点击事件 
        
  - **input**
  
        d.adb_ext.input('adbui')  # 输入文本 
        
  - **back**
  
        d.adb_ext.back()  # 发出 back 指令 


**get_ui 可以通过多种方式获取 UI**
  - **by attr** 通过在 uiautomator 里面看到的属性来获取
  
        ui = d.get_ui_by_attr(text='设置', desc='设置')  # 支持多个属性同时查找

        ui = d.get_ui_by_attr(text='设', is_contains=True)  # 支持模糊查找

        ui = d.get_ui_by_attr(text='设置', is_update=False)  # 如果需要在一个界面上获取多个 UI, 再次查找时可以设置不更新xml文件和截图,节省时间

        ui = d.get_ui_by_attr(class_='android.widget.TextView')  # class 在 python 中是关键字,因此使用 class_ 代替

        ui = d.get_ui_by_attr(desc='fffffff')  # 如果没有找到,返回 None;如果找到多个返回第一个

        ui = d.get_uis_by_attr(desc='fffffff')  # 如果是 get uis 没有找到,返回空的 list
    
  - **by xpath** 使用 xpath 来获取
        ![xpath](docs/image/xpath01.png)
  
        mic_btn = d.get_ui_by_xpath('.//FrameLayout/LinearLayout/RelativeLayout/ImageView[2]')  # 获取麦克风按钮
        mic_btn.click()  # 点击麦克风按钮
        
        # adbui 使用 lxml 解析 xml 文件,因此 by xpath 理论上支持任何标准的 xpth 路径。
        # 这里有一篇 xpath 使用的文章:https://cuiqingcai.com/2621.html
        
        # 另外获取的 ui 对象实际是一个自定义的 UI 实类,ui 有一个 element 的属性,element 就是 lxml 里面的 Element 对象,
        # 因此可以对 ui.element 执行 lxml 的相关操作。
        # lxml element 对象的文档:http://lxml.de/api/lxml.etree._Element-class.html
        
        scan_element = ui.element.getprevious()  # 获取麦克风的上一个 element,即扫一扫按钮
        scan_btn = d.get_ui_by_element(scan_element)  # 使用 element 实例化 UI
        scan_btn.click()  # 点击扫一扫按钮

  - **by ocr** 使用腾讯的OCR技术来获取
        ![xpath](docs/image/ocr01.png)
        
        d.init_ocr('10126986', 'AKIDT1Ws34B98MgtvmqRIC4oQr7CBzhEPvCL', 'AAyb3KQL5d1DE4jIMF2f6PYWJvLaeXEk')
        # 使用 ocr 功能前,必须要使用自己的开发密钥初始化,上面的密钥是我申请的公共测试密钥,要稳定使用请自行申请
        # 腾讯的 ocr 功能是免费使用的,需要自己到 http://open.youtu.qq.com/#/develop/new-join 申请自己的开发密钥
        
        btn = d.get_ui_by_ocr(text='爱拍')  # 找到爱拍文字的位置
        btn.click()  # 点击爱拍

## Change Log
20210425 version 4.5.0
- screenshot 和 dump xml 优先使用 adbui,预期速度有很大的提升
- 删除 Pillow 依赖

20210425 version 4.0.0
- screenshot 参数有变化,升级请谨慎
- 尝试尽量使用 minicap 截图
- 尝试不使用 pillow 功能

20210418 version 3.5.2
- 增加 minicap 截图

20210325 version 2.6
- dump xml 优先使用 --compressed 模式

20210325 version 2.4
- 修复python3.8以上版本找控件报错 RuntimeError: dictionary keys changed during iteration

20200402 version 1.0
- 修改screenshot 参数情况
- 去掉 cmd out save 函数
- init ocr支持keys传入多个key

20200328 version 0.40.1
- 修改 push pull 方法等参数
- 使用 timeout 库控制超时
- get ui by orc 去掉 min hit 参数,增加 is contains 参数

%package -n python3-adbui
Summary:	adbui 所有的功能都是通过 adb 命令,adbui 的特色是可以通过 xpath,ocr 获取 ui 元素。
Provides:	python-adbui
BuildRequires:	python3-devel
BuildRequires:	python3-setuptools
BuildRequires:	python3-pip
%description -n python3-adbui
# 常见问题
- adbui 交流微信群,加 hao1032,备注 adbui,会拉入微信群
- 使用 ocr 提示出错,请在该页面最后查看使用 ocr 示例


# adbui
adbui 所有的功能都是通过 adb 命令,adbui 的特色是可以通过 xpath,ocr 获取 ui 元素。

## 安装
    pip install adbui

## 要求
- 在命令中可以使用 adb 命令,即adb已经配置到环境变量
- adb 的版本最好是 >= 1.0.39,用老版本的 adb 可能会有一些奇怪的问题
- 依赖的库:lxml 解析 xml,requests 发 ocr 请求,pillow 图片处理

## 说明
- adbui 当前还在完善,bug 和建议请直接在 github 反馈
- 主要在 win7,python3 环境使用,其他环境可能有问题


## import and init
    from adbui import Device

    d = Device('123abc')  # 手机的sn号,如果只有一个手机可以不写


## adbui 可以分为 3 个部分
**util 负责执行完整的命令**

  - **cmd** 用来执行系统命令
  
        d.util.cmd('adb -s 123abc reboot')
        out = d.util.cmd('ping 127.0.0.1')
    
  - **adb** 用来执行 adb 命令
  
        d.util.adb('install xxx.apk')
        d.util.adb('uninstall com.tencent.mtt')
    
  - **shell** 用来执行 shell 命令
  
        d.util.shell('pm clear com.tencent.mtt')
        d.util.shell('am force-stop com.tencent.mtt')

**adb_ext 对常用 adb 命令的封装,下面列出部分操作(可在 adbui/adb_ext.py 文件自行增加需要的操作)**

  - **screenshot**
   
        d.adb_ext.screenshot() # 截图保存到系统临时目录,也可指定目录
        
  - **click**
  
        d.adb_ext.click(10, 32)  # 执行一个点击事件 
        
  - **input**
  
        d.adb_ext.input('adbui')  # 输入文本 
        
  - **back**
  
        d.adb_ext.back()  # 发出 back 指令 


**get_ui 可以通过多种方式获取 UI**
  - **by attr** 通过在 uiautomator 里面看到的属性来获取
  
        ui = d.get_ui_by_attr(text='设置', desc='设置')  # 支持多个属性同时查找

        ui = d.get_ui_by_attr(text='设', is_contains=True)  # 支持模糊查找

        ui = d.get_ui_by_attr(text='设置', is_update=False)  # 如果需要在一个界面上获取多个 UI, 再次查找时可以设置不更新xml文件和截图,节省时间

        ui = d.get_ui_by_attr(class_='android.widget.TextView')  # class 在 python 中是关键字,因此使用 class_ 代替

        ui = d.get_ui_by_attr(desc='fffffff')  # 如果没有找到,返回 None;如果找到多个返回第一个

        ui = d.get_uis_by_attr(desc='fffffff')  # 如果是 get uis 没有找到,返回空的 list
    
  - **by xpath** 使用 xpath 来获取
        ![xpath](docs/image/xpath01.png)
  
        mic_btn = d.get_ui_by_xpath('.//FrameLayout/LinearLayout/RelativeLayout/ImageView[2]')  # 获取麦克风按钮
        mic_btn.click()  # 点击麦克风按钮
        
        # adbui 使用 lxml 解析 xml 文件,因此 by xpath 理论上支持任何标准的 xpth 路径。
        # 这里有一篇 xpath 使用的文章:https://cuiqingcai.com/2621.html
        
        # 另外获取的 ui 对象实际是一个自定义的 UI 实类,ui 有一个 element 的属性,element 就是 lxml 里面的 Element 对象,
        # 因此可以对 ui.element 执行 lxml 的相关操作。
        # lxml element 对象的文档:http://lxml.de/api/lxml.etree._Element-class.html
        
        scan_element = ui.element.getprevious()  # 获取麦克风的上一个 element,即扫一扫按钮
        scan_btn = d.get_ui_by_element(scan_element)  # 使用 element 实例化 UI
        scan_btn.click()  # 点击扫一扫按钮

  - **by ocr** 使用腾讯的OCR技术来获取
        ![xpath](docs/image/ocr01.png)
        
        d.init_ocr('10126986', 'AKIDT1Ws34B98MgtvmqRIC4oQr7CBzhEPvCL', 'AAyb3KQL5d1DE4jIMF2f6PYWJvLaeXEk')
        # 使用 ocr 功能前,必须要使用自己的开发密钥初始化,上面的密钥是我申请的公共测试密钥,要稳定使用请自行申请
        # 腾讯的 ocr 功能是免费使用的,需要自己到 http://open.youtu.qq.com/#/develop/new-join 申请自己的开发密钥
        
        btn = d.get_ui_by_ocr(text='爱拍')  # 找到爱拍文字的位置
        btn.click()  # 点击爱拍

## Change Log
20210425 version 4.5.0
- screenshot 和 dump xml 优先使用 adbui,预期速度有很大的提升
- 删除 Pillow 依赖

20210425 version 4.0.0
- screenshot 参数有变化,升级请谨慎
- 尝试尽量使用 minicap 截图
- 尝试不使用 pillow 功能

20210418 version 3.5.2
- 增加 minicap 截图

20210325 version 2.6
- dump xml 优先使用 --compressed 模式

20210325 version 2.4
- 修复python3.8以上版本找控件报错 RuntimeError: dictionary keys changed during iteration

20200402 version 1.0
- 修改screenshot 参数情况
- 去掉 cmd out save 函数
- init ocr支持keys传入多个key

20200328 version 0.40.1
- 修改 push pull 方法等参数
- 使用 timeout 库控制超时
- get ui by orc 去掉 min hit 参数,增加 is contains 参数

%package help
Summary:	Development documents and examples for adbui
Provides:	python3-adbui-doc
%description help
# 常见问题
- adbui 交流微信群,加 hao1032,备注 adbui,会拉入微信群
- 使用 ocr 提示出错,请在该页面最后查看使用 ocr 示例


# adbui
adbui 所有的功能都是通过 adb 命令,adbui 的特色是可以通过 xpath,ocr 获取 ui 元素。

## 安装
    pip install adbui

## 要求
- 在命令中可以使用 adb 命令,即adb已经配置到环境变量
- adb 的版本最好是 >= 1.0.39,用老版本的 adb 可能会有一些奇怪的问题
- 依赖的库:lxml 解析 xml,requests 发 ocr 请求,pillow 图片处理

## 说明
- adbui 当前还在完善,bug 和建议请直接在 github 反馈
- 主要在 win7,python3 环境使用,其他环境可能有问题


## import and init
    from adbui import Device

    d = Device('123abc')  # 手机的sn号,如果只有一个手机可以不写


## adbui 可以分为 3 个部分
**util 负责执行完整的命令**

  - **cmd** 用来执行系统命令
  
        d.util.cmd('adb -s 123abc reboot')
        out = d.util.cmd('ping 127.0.0.1')
    
  - **adb** 用来执行 adb 命令
  
        d.util.adb('install xxx.apk')
        d.util.adb('uninstall com.tencent.mtt')
    
  - **shell** 用来执行 shell 命令
  
        d.util.shell('pm clear com.tencent.mtt')
        d.util.shell('am force-stop com.tencent.mtt')

**adb_ext 对常用 adb 命令的封装,下面列出部分操作(可在 adbui/adb_ext.py 文件自行增加需要的操作)**

  - **screenshot**
   
        d.adb_ext.screenshot() # 截图保存到系统临时目录,也可指定目录
        
  - **click**
  
        d.adb_ext.click(10, 32)  # 执行一个点击事件 
        
  - **input**
  
        d.adb_ext.input('adbui')  # 输入文本 
        
  - **back**
  
        d.adb_ext.back()  # 发出 back 指令 


**get_ui 可以通过多种方式获取 UI**
  - **by attr** 通过在 uiautomator 里面看到的属性来获取
  
        ui = d.get_ui_by_attr(text='设置', desc='设置')  # 支持多个属性同时查找

        ui = d.get_ui_by_attr(text='设', is_contains=True)  # 支持模糊查找

        ui = d.get_ui_by_attr(text='设置', is_update=False)  # 如果需要在一个界面上获取多个 UI, 再次查找时可以设置不更新xml文件和截图,节省时间

        ui = d.get_ui_by_attr(class_='android.widget.TextView')  # class 在 python 中是关键字,因此使用 class_ 代替

        ui = d.get_ui_by_attr(desc='fffffff')  # 如果没有找到,返回 None;如果找到多个返回第一个

        ui = d.get_uis_by_attr(desc='fffffff')  # 如果是 get uis 没有找到,返回空的 list
    
  - **by xpath** 使用 xpath 来获取
        ![xpath](docs/image/xpath01.png)
  
        mic_btn = d.get_ui_by_xpath('.//FrameLayout/LinearLayout/RelativeLayout/ImageView[2]')  # 获取麦克风按钮
        mic_btn.click()  # 点击麦克风按钮
        
        # adbui 使用 lxml 解析 xml 文件,因此 by xpath 理论上支持任何标准的 xpth 路径。
        # 这里有一篇 xpath 使用的文章:https://cuiqingcai.com/2621.html
        
        # 另外获取的 ui 对象实际是一个自定义的 UI 实类,ui 有一个 element 的属性,element 就是 lxml 里面的 Element 对象,
        # 因此可以对 ui.element 执行 lxml 的相关操作。
        # lxml element 对象的文档:http://lxml.de/api/lxml.etree._Element-class.html
        
        scan_element = ui.element.getprevious()  # 获取麦克风的上一个 element,即扫一扫按钮
        scan_btn = d.get_ui_by_element(scan_element)  # 使用 element 实例化 UI
        scan_btn.click()  # 点击扫一扫按钮

  - **by ocr** 使用腾讯的OCR技术来获取
        ![xpath](docs/image/ocr01.png)
        
        d.init_ocr('10126986', 'AKIDT1Ws34B98MgtvmqRIC4oQr7CBzhEPvCL', 'AAyb3KQL5d1DE4jIMF2f6PYWJvLaeXEk')
        # 使用 ocr 功能前,必须要使用自己的开发密钥初始化,上面的密钥是我申请的公共测试密钥,要稳定使用请自行申请
        # 腾讯的 ocr 功能是免费使用的,需要自己到 http://open.youtu.qq.com/#/develop/new-join 申请自己的开发密钥
        
        btn = d.get_ui_by_ocr(text='爱拍')  # 找到爱拍文字的位置
        btn.click()  # 点击爱拍

## Change Log
20210425 version 4.5.0
- screenshot 和 dump xml 优先使用 adbui,预期速度有很大的提升
- 删除 Pillow 依赖

20210425 version 4.0.0
- screenshot 参数有变化,升级请谨慎
- 尝试尽量使用 minicap 截图
- 尝试不使用 pillow 功能

20210418 version 3.5.2
- 增加 minicap 截图

20210325 version 2.6
- dump xml 优先使用 --compressed 模式

20210325 version 2.4
- 修复python3.8以上版本找控件报错 RuntimeError: dictionary keys changed during iteration

20200402 version 1.0
- 修改screenshot 参数情况
- 去掉 cmd out save 函数
- init ocr支持keys传入多个key

20200328 version 0.40.1
- 修改 push pull 方法等参数
- 使用 timeout 库控制超时
- get ui by orc 去掉 min hit 参数,增加 is contains 参数

%prep
%autosetup -n adbui-4.5.19

%build
%py3_build

%install
%py3_install
install -d -m755 %{buildroot}/%{_pkgdocdir}
if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
pushd %{buildroot}
if [ -d usr/lib ]; then
	find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/lib64 ]; then
	find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/bin ]; then
	find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/sbin ]; then
	find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
fi
touch doclist.lst
if [ -d usr/share/man ]; then
	find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
fi
popd
mv %{buildroot}/filelist.lst .
mv %{buildroot}/doclist.lst .

%files -n python3-adbui -f filelist.lst
%dir %{python3_sitelib}/*

%files help -f doclist.lst
%{_docdir}/*

%changelog
* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 4.5.19-1
- Package Spec generated