如何使用python控制Android/iOS设备?

如何使用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

我希望通过usb控制插入MAC/PC的移动设备

具体来说,我只想使用python代码打开和关闭“飞机模式”

我控制移动设备的糟糕解决方案是

使用Selenium和TeamViewer web模式

但是,正如你所看到的,当我打开飞行模式时,设备会“离线”

有什么想法吗?

你可以用它

下面是一个您可以基于脚本的示例(由
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()