如何使用python控制Android/iOS设备?
我希望通过usb控制插入MAC/PC的移动设备 具体来说,我只想使用python代码打开和关闭“飞机模式” 我控制移动设备的糟糕解决方案是 使用Selenium和TeamViewer web模式 但是,正如你所看到的,当我打开飞行模式时,设备会“离线” 有什么想法吗?你可以用它 下面是一个您可以基于脚本的示例(由如何使用python控制Android/iOS设备?,android,python,selenium,appium,androidviewclient,Android,Python,Selenium,Appium,Androidviewclient,我希望通过usb控制插入MAC/PC的移动设备 具体来说,我只想使用python代码打开和关闭“飞机模式” 我控制移动设备的糟糕解决方案是 使用Selenium和TeamViewer web模式 但是,正如你所看到的,当我打开飞行模式时,设备会“离线” 有什么想法吗?你可以用它 下面是一个您可以基于脚本的示例(由culebra自动生成): #/usr/bin/env python #-*-编码:utf-8-*- """ 版权所有(C)2013-2018迭戈·托雷斯·米兰 由Culebra v15
culebra
自动生成):
#/usr/bin/env python
#-*-编码:utf-8-*-
"""
版权所有(C)2013-2018迭戈·托雷斯·米兰
由Culebra v15.4.0于2018-08-09创建
__ __ __ __
/ \ / \ / \ / \
____________________/ __\/ __\/ __\/ __\_____________________________
___________________/ /__/ /__/ /__/ /________________________________
| / \ / \ / \ / \ \___
|/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\_____/--<
@作者:迭戈·托雷斯·米兰
@作者:Jennifer E.Swofford(ascii艺术蛇)
"""
进口稀土
导入系统
导入操作系统
导入单元测试
从com.dtmilano.android.viewclient导入viewclient,CulebraTestCase
标签='CULEBRA'
CulebraTests类(CulebraTestCase):
@类方法
def设置等级(cls):
cls.kwargs1={'ignoreversioncheck':False,'verbose':False,'ignoresecuredevice':False}
cls.kwargs2={'forceviewserveruse':False,'useuiautomatorhelper':False,'ignoreuiautomatorkilled':True,'autodump':False,'debug':{},'startviewserver':True,'compresseddump':True}
cls.options={'start-activity':None,'concertina':False,'device-art':None,'use-jar':False,'multi-device':False,'unit test class':True,'save screenshot':None,'use dictionary':False,'id','scale':0.5,'find view with content description':True,'window':-1,'orientation locked':None,'concertina-config':无,“保存视图屏幕截图”:无,“按id查找视图”:True,“日志操作”:False,“使用regexps”:False,“空后端”:False,“自动regexps”:无,“不验证屏幕转储”:True,“详细注释”:False,“gui”:True,“查找带文本的视图”:True,“系统路径前置”:False,“安装apk”:无,“放置阴影”:False,“输出”:aonoff.py',“单元测试方法”:无,,“交互”:False}
cls.sleep=5
def设置(自):
super(CulebraTests,self).setUp()
def拆卸(自):
super(CulebraTests,self).tearDown()
def先决条件(自身):
如果不是超级(CulebraTests,self)。前提条件():
返回错误
返回真值
def testSomething(self):
如果不是self.prepositions():
self.fail('先决条件失败')
_s=睡眠
_v=冗长的测试
self.vc.dump(窗口=-1)
self.vc.uiDevice.openQuickSettings()
self.vc.sleep(美国)
self.vc.dump(窗口=-1)
self.vc.findViewWithContentDescriptionOrRaise(u“飞机模式”).touch()
self.vc.sleep(美国)
self.vc.dump(窗口=-1)
self.device.press('KEYCODE\u BACK')
self.device.press('KEYCODE\u BACK')
打印>>sys.stderr,“现在飞机模式打开,将其切换回关闭”
self.vc.sleep(5)
self.vc.uiDevice.openQuickSettings()
self.vc.sleep(美国)
self.vc.dump(窗口=-1)
self.vc.findViewWithContentDescriptionOrRaise(u“飞机模式”).touch()
self.vc.sleep(美国)
self.vc.dump(窗口=-1)
self.device.press('KEYCODE\u BACK')
self.device.press('KEYCODE\u BACK')
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
CulebraTests.main()
谢谢你的回答,迭戈,AndroidViewClient/culebra不是只用于测试吗?不是用于实际使用吗?我的意思是,实际插入我的android设备。我想控制我的设备,而不是模拟器。我不知道你的意思,但AVC/culebra可以连接到任何android设备或模拟器,并运行像这样的脚本。哦,这意味着我是在这里做错了什么,让我试着找出原因,再次感谢!@DiegoTorresMilano我想知道是否可以使用AndroidViewClient/culebra在android手机上实现流程自动化?例如,每N秒切换一次飞行模式。如果不可以,您可以推荐其他什么软件实现这种自动化?@NeStack当然可以。大多数操作真正的用户可以使用AndroidViewClient/culebra在解释屏幕和发送事件时实现自动化
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
Copyright (C) 2013-2018 Diego Torres Milano
Created on 2018-08-09 by Culebra v15.4.0
__ __ __ __
/ \ / \ / \ / \
____________________/ __\/ __\/ __\/ __\_____________________________
___________________/ /__/ /__/ /__/ /________________________________
| / \ / \ / \ / \ \___
|/ \_/ \_/ \_/ \ o \
\_____/--<
@author: Diego Torres Milano
@author: Jennifer E. Swofford (ascii art snake)
"""
import re
import sys
import os
import unittest
from com.dtmilano.android.viewclient import ViewClient, CulebraTestCase
TAG = 'CULEBRA'
class CulebraTests(CulebraTestCase):
@classmethod
def setUpClass(cls):
cls.kwargs1 = {'ignoreversioncheck': False, 'verbose': False, 'ignoresecuredevice': False}
cls.kwargs2 = {'forceviewserveruse': False, 'useuiautomatorhelper': False, 'ignoreuiautomatorkilled': True, 'autodump': False, 'debug': {}, 'startviewserver': True, 'compresseddump': True}
cls.options = {'start-activity': None, 'concertina': False, 'device-art': None, 'use-jar': False, 'multi-device': False, 'unit-test-class': True, 'save-screenshot': None, 'use-dictionary': False, 'glare': False, 'dictionary-keys-from': 'id', 'scale': 0.5, 'find-views-with-content-description': True, 'window': -1, 'orientation-locked': None, 'concertina-config': None, 'save-view-screenshots': None, 'find-views-by-id': True, 'log-actions': False, 'use-regexps': False, 'null-back-end': False, 'auto-regexps': None, 'do-not-verify-screen-dump': True, 'verbose-comments': False, 'gui': True, 'find-views-with-text': True, 'prepend-to-sys-path': False, 'install-apk': None, 'drop-shadow': False, 'output': 'aonoff.py', 'unit-test-method': None, 'interactive': False}
cls.sleep = 5
def setUp(self):
super(CulebraTests, self).setUp()
def tearDown(self):
super(CulebraTests, self).tearDown()
def preconditions(self):
if not super(CulebraTests, self).preconditions():
return False
return True
def testSomething(self):
if not self.preconditions():
self.fail('Preconditions failed')
_s = CulebraTests.sleep
_v = CulebraTests.verbose
self.vc.dump(window=-1)
self.vc.uiDevice.openQuickSettings()
self.vc.sleep(_s)
self.vc.dump(window=-1)
self.vc.findViewWithContentDescriptionOrRaise(u'''Airplane mode''').touch()
self.vc.sleep(_s)
self.vc.dump(window=-1)
self.device.press('KEYCODE_BACK')
self.device.press('KEYCODE_BACK')
print >> sys.stderr, 'Now Airplane mode is ON, switching it back to OFF'
self.vc.sleep(5)
self.vc.uiDevice.openQuickSettings()
self.vc.sleep(_s)
self.vc.dump(window=-1)
self.vc.findViewWithContentDescriptionOrRaise(u'''Airplane mode''').touch()
self.vc.sleep(_s)
self.vc.dump(window=-1)
self.device.press('KEYCODE_BACK')
self.device.press('KEYCODE_BACK')
if __name__ == '__main__':
CulebraTests.main()