以下代码,全部放开执行会出报错,可以放开部分代码在IDE中执行,

import time

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from selenium.webdriver.support.ui import WebDriverWait

desired_caps = dict()
# TODO:指定要测试的平台,不区分大小写
desired_caps['platformName'] = 'Android'
# TODO:指定平台版本
desired_caps['platformVersion'] = '8.0.0'
desired_caps['deviceName'] = '192.168.120.103:5555'
# TODO:以下两行指定打开的包名和activity名
desired_caps['appPackage'] = 'com.android.settings'
# desired_caps['appActivity'] = '.Settings'
desired_caps['appActivity'] = '.ChooseLockPattern'
# todo: 加入以下两行代码可以保证输入框输入中文
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
# time.sleep(2)
# todo: 获取当前运行的应用包名和activity名
print(driver.current_package + '/' + driver.current_activity)
# # TODO: 通过id 获取元素
# list_id = driver.find_elements_by_id('android:id/title')
# todo:通过xpath获取一组元素
# for title in list_id:
#     print(title.tag_name+'\t'+title.text+'\t'+title.id+'\t')
# driver.find_element_by_xpath('//*[@text="显示"]').click()
# time.sleep(1)

# todo: 启动应用
# driver.start_activity('com.android.messaging', '.ui.conversationlist.ConversationListActivity')
# print(driver.current_package+'/'+driver.current_activity)
# TODO: 根据包名判断是否应用已经安装
# if driver.is_app_installed('cn.goapk.market'):
#     todo: 卸载应用
#     driver.remove_app('cn.goapk.market')
# todo: 安装应用
# driver.install_app('D:/SOFTWARE/Genymotion/Apk/anzhishichang.apk')
# time.sleep(1)
# todo: 切换到后台运行,参数是指在后台停留的时间,时间结束会自动返回前台
# driver.background_app(2)
# time.sleep(1)

# TODO:通过xpath获取带有‘设’字的元素
# list_she = driver.find_elements_by_xpath('//*[contains(@text,"设")]')
# print(len(list_she))
# for she_ in list_she:
#     print(she_.text)

# todo: 元素等待---加载指定的时长,等待元素出现,若超时仍未出现元素,报错,在指定时长内找到元素,则继续往下执行
#   隐式等待:
#       示例:driver.implicitly_wait(20)
#   显式等待:在total_time的时间内,每flu_time秒检查一次(默认0.5秒检查一次),若找到元素,就继续往下执行,否则报超时错误
#       步骤:1。导包 2.创建WebDriverWait对象 3.调用util方法
#       示例:wait_driver = WebDriverWait(driver,total_time,flu_time)
#             display_text = wait_driver.util(lambda x: x.find_element_by_xpath('//*[@text="显示"]'))
#             display_text.click()

# 点击搜索按钮
# wait_search_btn = WebDriverWait(driver, 5, 1).until(lambda x: x.find_element_by_xpath('//*[@content-desc="在设置中搜索"]'))
# wait_search_btn.click()
# search_button = driver.find_element_by_xpath('//*[@content-desc="在设置中搜索"]')
# # search_button.click()
# search_button_input = driver.find_element_by_id('android:id/search_src_text')
# # TODO:文本框输入
# search_button_input.send_keys('hello')
# time.sleep(2)
# # TODO:清空文本框文本
# search_button_input.clear()
# time.sleep(2)
# # TODO:文本框输入中文需要再上边添加两行代码
# search_button_input.send_keys('你好')
# todo: 获取控件的宽和高
# print(wait_search_btn.size)
# print(wait_search_btn.size['width'])
# print(wait_search_btn.size['height'])
# todo: 获取控件的坐标位置
# print(wait_search_btn.location)
# print(wait_search_btn.location['x'])
# print(wait_search_btn.location['y'])


# todo: 根据属性名获取元素值
# element_values = driver.find_elements_by_id('android:id/title')
# for i in element_values:
#     print(i.get_attribute('name'), end='\t')
#     print(i.get_attribute('resourceId'), end='\t')
#     print(i.get_attribute('className'), end='\t')
#     print(i.get_attribute('text'))

# todo : 屏幕滑动
#  -swipe
#  -scroll
#  -drag_and_drop
# todo:1)swipe  ----- 参数【start_x,start_y,end_x,end_y,滑动步长(单位:ms)】
# driver.swipe(720, 1500, 720, 200, 1500)
# todo:2)scroll ----- 参数【滑动起始控件,滑动结束控件,步长】
# display_btn = driver.find_element_by_xpath('//*[@text="显示"]')
# settings_btn = driver.find_element_by_xpath('//*[@text = "设置"]')
# driver.scroll(display_btn, settings_btn, 1000)
# driver.drag_and_drop(display_btn,settings_btn)
# todo:3)drag_and_drop ----- 拖拽 参数【起始位置控件,结束位置控件,步长】
# driver.close_app()
# web_btn = driver.find_element_by_xpath('//*[@text="WebView Browser Tester"]')
# email_btn = driver.find_element_by_xpath('//*[@text="电子邮件"]')
# driver.drag_and_drop(web_btn, email_btn)

# todo: tap -- 模拟多个手指点击屏幕,最多五个手指
# driver.tap([(100, 620), (100, 360), (100, 500)], 500)
# todo:
#  TouchAction高级手势,可以将小的动作组合成一系列复杂的动作
#  --tap
#  --press
#  --release
#  --long_press
# todo: 1)tap :轻敲---参数可以直接传控件元素【要操作的控件,与。click效果一致】也可以传坐标 如:【x=100,y=100】(x=和y=不能省略)
# TouchAction(driver).tap(x=850, y=1550).perform()
# TouchAction(driver).tap(display_btn).perform()
# todo:
#  2)press 按下--参数【x=100,y=100】
#  3)release 抬起
# TouchAction(driver).press(x=200,y=540).release().perform()
# todo:
#  4)long_press 长按   参数【x,y,步长】
# TouchAction(driver).press(650, 650).wait(2000).release().perform()  # 与long_press方法效果一直
# TouchAction(driver).long_press(650, 650, 2000)
# todo:5)move_to 移动 参数【x,y】
# TouchAction(driver).press(x=225, y=960).move_to(x=540, y=960).perform()
# time.sleep(10)

# todo:获取手机分辨率
print(driver.get_window_size())
# todo:截图 参数【存放的路径】
driver.get_screenshot_as_file('/Screenshots/foo.png')
# todo: 获取手机网络状态
print(driver.network_connection)
# todo: 设置手机网络 参数【ConnectionType】如下
'''
 Possible values:
            Value (Alias)      | Data | Wifi | Airplane Mode
            -------------------------------------------------
            0 (None)           | 0    | 0    | 0
            1 (Airplane Mode)  | 0    | 0    | 1
            2 (Wifi only)      | 0    | 1    | 0
            4 (Data only)      | 1    | 0    | 0
            6 (All network on) | 1    | 1    | 0
        These are available through the enumeration `appium.webdriver.ConnectionType`

'''
driver.set_network_connection(2)
time.sleep(3)
'''
    需求:三次音量+ 返回 两次音量—
'''
# todo: 发送键到设备-----更多的keyCode值百度搜索android keyCode就能查到
driver.press_keycode(24)  # 音量+
driver.press_keycode(24)
driver.press_keycode(24)

driver.press_keycode(4)  # 返回
driver.press_keycode(3)  # HOME键
driver.press_keycode(25)  # 音量-

# todo: 打开通知栏
driver.open_notifications()
# todo: 关闭运行的app
driver.close_app()
# TODO: 退出驱动,同时关闭驱动关联的app
driver.quit()