- 元素定位
- 元素定位工具
- UIAutomatorView
- appium desktop inspector
- weditor
- 基本操作
- 基础api
- 输入文本
- 模拟手势
- 其他操作
打开手机上的“设置”,点击“显示”
from appium import webdriver
import time
# 连接移动设备所必需的参数,放到字典中
from selenium.webdriver.common.by import By
desired_caps = {'deviceName': '127.0.0.1:62001', 'platformName': 'Android', 'platformVersion': '7.1',
'appPackage': 'com.android.settings', 'appActivity': '.Settings'}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_capabilities=desired_caps)
time.sleep(1)
# find_element(by=By.XPATH, value=xpath)
# 在Android手机中,text并不是文本,而是属于标签的 属性
driver.find_element(by=By.XPATH, value="//*[@text='显示']").click()
# driver.find_element_by_xpath("//*[@text='显示']").click() 弃用
print(driver.page_source)
time.sleep(3)
# 关闭app
driver.close_app()
# 释放资源
driver.quit()
元素定位工具
UIAutomatorView
uiatuomator2,python第三方库 appUi自动化测试框架
【安装步骤:】
cmd:
1.pip install Uiautomator2
2.python -m uiautomator2 init(报错:进程被终止,查看是atx-agent未安装成功,自行下载安装包本地安装,成功)
3.pip install weditor(报错,git clone 克隆到本地再安装,成功)
确认安装成功:wediore --help
【使用:】
from appium import webdriver
import time
# 连接移动设备所必需的参数,放到字典中
desired_caps = {'deviceName': '127.0.0.1:62001', 'platformName': 'Android', 'platformVersion': '7.1',
'appPackage': 'com.android.settings', 'appActivity': '.Settings'}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_capabilities=desired_caps)
time.sleep(1)
# 获取界面xml源码
print(driver.page_source)
# 安装app(这里用的是32位)
driver.install_app(r"C:Userswin10DesktoppycodeappcodeiBiliPlayer-bili.apk")
# 判断app是否安装
if driver.is_app_installed("tv.danmaku.bili"):
# 卸载
driver.remove_app("tv.danmaku.bili")
# 关闭app
driver.close_app()
time.sleep(2)
# 释放资源
driver.quit()
# 当前的包名
print(driver.current_package)
# 当前界面名字
print(driver.current_activity)
el=driver.find_element(by=By.XPATH, value="//*[@text='显示']")
# 获取元素的宽高(字典)
print(el.size)
# 获取元素文本内容
print(el.text)
# 获取属性值
print(el.get_attribute("text"))
# 获取元素左上角坐标
print(el.location)
元素定位方法:
# 等待:显式等待,强制等待,隐式等待
driver.implicitly_wait(15)
# 通过resourceid定位元素
driver.find_element(by=AppiumBy.ID, value="com.android.settings:id/expand_indicator").click()
# 2.uiautomator
el = driver.find_element_by_android_uiautomator('new UiSelector().text("通知")')
# 组合定位
driver.find_element_by_android_uiautomator('new UiSelector().text("添加帐号").resourceId("com.android.contacts:id/add_account_button")').click()
# 3. xpath
driver.find_element(by=By.XPATH, value="//*[@resource-id='com.android.settings:id/search']").click()
输入文本
进入“设置”,点击右上角“搜索”,写入三组内容,清除最后输入的内容
driver.find_element(by=By.XPATH, value="//*[@resource-id='com.android.settings:id/search']").click()
time.sleep(5)
driver.find_element(by=By.XPATH, value="//*[@resource-id='android:id/search_src_text']").send_keys("abc")
driver.find_element(by=By.XPATH, value="//*[@resource-id='android:id/search_src_text']").send_keys("123")
driver.find_element(by=By.XPATH, value="//*[@resource-id='android:id/search_src_text']").send_keys("张三")
time.sleep(2)
driver.find_element(by=By.XPATH, value="//*[@resource-id='android:id/search_src_text']").clear()
模拟手势
- 滚动
页面滑动有“惯性”机制,会根据按下、抬起的位置以及总的时间,滚动不一样的距离
两种滚动方式:
# 1.滚动,根据当前手机分辨率确定坐标 driver.swipe(start_x=270, start_y=640, end_x=270, end_y=320) # 2.按元素定位要滑动到的相对位置 el1 = driver.find_element(by=By.XPATH, value="//*[@text='通知']") el2 = driver.find_element(by=By.XPATH, value="//*[@text='WLAN']") driver.scroll(el1, el2)
法1若想对不同型号手机均适用,可加如下代码:
# 滚动,根据当前手机分辨率确定坐标 # 获取当前屏幕的分辨率 size=driver.get_window_size() print(size) width=size['width'] height=size['height'] driver.swipe(start_x=width/2, start_y=height/3*2, end_x=width/2, end_y=height/3)
- 拖拽
el1 = driver.find_element(by=AppiumBy.XPATH, value="//*[@text='通知']") el2 = driver.find_element(by=AppiumBy.XPATH, value="//*[@text='WLAN']") # 1拖拽到2 driver.drag_and_drop(el1, el2)
# “哔哩哔哩”拖拽到“豆瓣”处 el1 = driver.find_element(by=AppiumBy.XPATH, value="//*[@text='哔哩哔哩']") el2 = driver.find_element(by=AppiumBy.XPATH, value="//*[@text='豆瓣']") action = ActionChains(driver) action.w3c_actions.pointer_action.click_and_hold(el1).pause(2).move_to(el2) action.w3c_actions.pointer_action.release() action.perform() time.sleep(3)
- 按下再抬起
action = ActionChains(driver) # 按下再抬起 action.w3c_actions.pointer_action.click_and_hold(el1) action.w3c_actions.pointer_action.release() # 执行 action.perform()
- 长按
action = ActionChains(driver) # 长按(2s) action.w3c_actions.pointer_action.click_and_hold(el1).pause(2) action.w3c_actions.pointer_action.release() # 执行 action.perform()
# 长按两秒,移动到el2 action.w3c_actions.pointer_action.click_and_hold(el1).pause(2).move_to(el2)其他操作
# 获取手机时间
print(driver.device_time)
# 获取网络连接情况(帮助文档查看)
print(driver.network_connection)
# 截图
print(driver.get_screenshot_as_file("jietu.png"))
# 打开通知
driver.open_notifications()



