1.安装
pip install Appium-Python-Client
2.基本使用
import time
from appium import webdriver
desired_caps = dict()
desired_caps['platformName'] = 'Android' # 大小写无所谓,但是不能乱写
desired_caps['platformVersion'] = '5.1.1' # 不能写错
desired_caps['deviceName'] = 'Android Emulator' # android 可随便写,但不能不写;ios不能随便写
desired_caps['unicodekeyboard'] = True # 允许输入中文
desired_caps['resetkeyboard'] = True # 允许输入中文
desired_caps['appPackage'] = 'com.android.settings'
desired_caps['appActivity'] = '.Settings'
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(1)
# 打开一个页面
driver.start_activity('com.android.contacts', '.activities.PeopleActivity')
# driver.current_package
# driver.current_activity
time.sleep(1)
# driver.close_app() #关掉当前app
# driver.install_app("1.apk") #安装apk
# driver.remove_app("com.android.xxx") #卸载apk
# driver.is_app_installed("com.android.xxx") #是否安装某app
# driver.background_app(3) #将应用置于后台3秒后自动切回前台
driver.quit()
3.元素定位
1. uiautomatorviewer
在sdk/tools/bin/uiautomatorviewer.bat
先用该工具找到布局参数
1.保证想要查看的元素在当前屏幕上;
2.打开uiautomatorviewer,点击左上角第二个按钮截屏
3.如果点击时报错,adb kill-server,adb start-server
2.取元素方式
** 取单个**
# driver.find_element_by_id("com.android.settings:id/search")
# driver.find_element_by_class_name("android.widget.TextView")
driver.find_element_by_xpath("//*[contains(@text,'更多')]").click()
取多个
driver.find_elements_by_id("com.android.settings:id/search")
#其它同理
3.元素等待
1.隐式等待
driver.implicitly_wait(10)
统一设置等待时长,之后程序里所有的 find_Element_xxx 方法都会以这个设置为准,找不到元素时等待 10 秒,10 秒内找到立即执行下面操作,超过 10 秒还找不到,就报 NosuchElementException 异常。
2.显式等待
显式等待只针对某一个找元素操作单独设置等待时间和频率,其它没写 WebDriverWait 的找元素操作不会等待,找不到直接报错。
button = WebDriverWait(driver, 5, 1).until(lambda x: x.find_element_by_xpath("//*[contains(@text,'更多')]"))
等待 5 秒,每1秒检查一次这个元素在不在,找到后立即往下执行,超过 5 秒还找不到,报 TimeoutException。
4.元素操作
1.基本操作
element.click() # 点击
el.send_keys(value) # 输入文字
el.clear() # 清空输入框内容
el.text # 获取元素文本内容
# el.location #位置
# el.size # 宽高
有时不能输入中文,在前置参数中加入下面两行就行了:
desired_caps['unicodekeyboard'] = True # 允许输入中文
desired_caps['resetkeyboard'] = True # 允许输入中文
2.取属性值
3.滑动
1.滑动的事件方法
1.swipe
driver.swipe()
特点:参数是坐标点,根据持续时间决定惯性大小
2.scroll
driver.scroll()
参数是元素,从一个元素滑动到另一个元素,有惯性
3.drag_and_drop
driver.drag_and_drop()
参数是元素,从一个元素滑动到另一个元素,没惯性,滑的比较准确
2.事件选择
无非考虑两点:考虑是传入坐标还是元素;考虑要不要有惯性;
传元素:
有惯性用 scroll,无惯性用 drag_and_drop
传坐标:只能用swipe,想要有惯性就设置短的duration,否则设置长的duration。
4.复杂手势 TouchAction
# 找到要操作的元素
search_el = driver.find_element_by_id("com.android.settings:id/search")
# 创建action对象
action = TouchAction(driver)
# 点击元素
action.tap(search_el)
# 开始执行
action.perform()
按下:press
抬起:release
# 按下坐标位置等2s后抬起
action.press(x=100, y=100).wait(2000).release().perform()
# 和上面一样的效果
action.long_press(x=100, y=100,duration=2000).perform()
怎么取坐标点?
4.其它操作
1.分辨率,截图
# 取设备分辨率
print(driver.get_window_size())
# 截图
driver.get_screenshot_as_file('screen.png')
2.网络状态:
driver.network_connection
# 设置当前网络为飞行模式
driver.set_network_connection(1)
3.发送键值
# 按返回键
driver.press_keycode(4)
4.通知栏
# 打开通知栏,2秒后关闭通知栏
driver.open_notifications()
time.sleep(2)
driver.press_keycode(4)