监控启动的应用包名
adb logcat | findstr START
监控结果:红色是包名和启动页
02-16 22:29:10.935 1652 2126 I ActivityTaskManager: START u0 {flg=0x24000000 hwFlg=0x10 cmp=com.netease.cloudmusic/.activity.MainActivity (has extras)} from uid 10221
安装并启动app
免安装和免重置启动app
xpath定位
滚动后元素定位
在EDGE中查看手机H5页面
手机里的H5可能是Chrome内核
把chromedriver放入到程序中
edge://inspect/#devices
H5页面定位------ABtester
from appium import webdriver
import os
#安装并启动启动app
#apk_file=os.path.join(r"C:\Users\123\Desktop\NeteaseCloudMusic_Music_official_8.6.70.220210194111_32.apk")
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '10.0'
desired_caps['deviceName'] = '17AHDU20619001673'
"不要重置app状态"
desired_caps['noReset']=True
desired_caps['fullReset']=False
# desired_caps['appPackage']="com.netease.cloudmusic"
# desired_caps['appActivity']="activity.LoadingActivity"
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
driver.implicitly_wait(100)
meiri=driver.find_element_by_xpath("//*[@text='网易云音乐']").click()
driver.implicitly_wait(15)
#meiri2=driver.find_element_by_xpath("//*[@text='每日推荐']").click()
meiri2=driver.find_element_by_xpath("//*[contains(@text,'推荐')]").click()
#或者使用原生方式定位
#driver.find_element_by_android_uiautomator("new UISector().resourceid('com.huawei.android.launcher:id/dock_divider')")
#拿到Toast
# toast=driver.find_element_by_xpath("//android.widget.Toast")
# print(toast.text)
#滚动后定位
# driver.find_element_by_android_uiautomator(
# 'new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().text("辅助功能"))')
# m4=driver.find_element_by_xpath("//android.widget.TextView[@text='显示']").click()
# m4.click()
driver.implicitly_wait(3)
meiri3=driver.find_element_by_id("com.netease.cloudmusic:id/playAllTextView").click()
回到桌面
第1个参数为按键代码(3为Home,4为返回,24、25为音量+-。。。可自行百度android keycode);
driver.keyevent(3)或者
driver.press_keycode(3)
4是返回键
其他转载见:
appium+python怎么按系统按键如按下返回键、home键等等_ezreal_tao的博客-CSDN博客_appium 点击home键
查看手机装的所有应用的包名:
adb shell pm list packages
查看第三方应用:
pm list packages -3
卸载:
adb uninstall +包名tv.danmaku.bili
过滤启动应用:注意findstr只能在windows下使用,不能在shell使用
监控启动的app---------------adb shell logcat | findstr START
测试app启动时间------冷启动和热启动,命令行有提示
adb shell am start -W com.netease.cloudmusic/.activity.LoadingActivity
import time
from appium import webdriver
import os
#安装并启动启动app
#apk_file=os.path.join(r"C:\Users\123\Desktop\NeteaseCloudMusic_Music_official_8.6.70.220210194111_32.apk")
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '10.0'
desired_caps['deviceName'] = '17AHDU20619001673'
"不要重置app状态"
desired_caps['noReset']=True
desired_caps['fullReset']=False
#com.netease.cloudmusic/.activity.LoadingActivity
desired_caps['appPackage']="com.netease.cloudmusic"
desired_caps['appActivity']="activity.LoadingActivity"
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
driver.implicitly_wait(100)
#meiri=driver.find_element_by_xpath("//*[@text='网易云音乐']").click()
time.sleep(2)
driver.keyevent(4)
time.sleep(5)
#driver.keyevent(3)
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
#meiri=driver.find_element_by_xpath("//*[@text='网易云音乐']").click()
driver.implicitly_wait(15)
#meiri2=driver.find_element_by_xpath("//*[@text='每日推荐']").click()
meiri2=driver.find_element_by_xpath("//*[contains(@text,'推荐')]").click()
#或者使用原生方式定位
#driver.find_element_by_android_uiautomator("new UISector().resourceid('com.huawei.android.launcher:id/dock_divider')")
#拿到Toast
# toast=driver.find_element_by_xpath("//android.widget.Toast")
# print(toast.text)
#滚动后定位
# driver.find_element_by_android_uiautomator(
# 'new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().text("辅助功能"))')
# m4=driver.find_element_by_xpath("//android.widget.TextView[@text='显示']").click()
# m4.click()
driver.implicitly_wait(3)
driver.keyevent(93)
time.sleep(1)
driver.keyevent(93)
meiri3=driver.find_element_by_id("com.netease.cloudmusic:id/playAllTextView").click()
driver.keyevent(164)
driver.keyevent(25)
driver.press_keycode(24)
driver.keyevent(26)
time.sleep(2)
driver.keyevent(26)
yc用pytest重复执行测试用例很多次-
@pytest.mark.repeat(10)-----用在方法前
打开通知栏下拉框:
driver.open_notifications()
打开一个app或者跳转到一个app-------
driver.start_activity("com.netease.cloudmusic","activity.LoadingActivity")
查看包名:
程序里打印:
代码中增加driver.current_package和driver.current_activity
在代码中增加driver.is_app_installed(“包名”)、driver.remove_app(“包名”)和driver.install_app(“安装包路径”)
来判断某APP是否安装、卸载指定包名的APP以及安装APP
driver.is_app_installed("包名")#判断指定APP是否已安装
driver.remove_app("包名")#删除指定APP
driver.install_app("安装包路径")#安装APP,需指定apk安装包路径
将当前应用置于后台
driver.background_app(seconds)#先将应用置于后台,等待指定时间后调回前台
定位元素一定要是当前界面可见元素
一定要是当前页面可见才行,下滚可见或者下拉可见都不行,从定位一组元素的结果可以看出
要在输入框输入中文:在字典里加
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True
获取所有带“设”的词语,并打印出来
#获取所有test中包含“设”字的元素,获取元素文本并打印出出来
shes=driver.find_elements_by_xpath("//*[contains(@text,'设')]")
for she in shes:#循环遍历
print(she.text)#输出元素文本
print(driver.find_element_by_xpath("//*[@content-desc='搜索']").location)#输出“搜索”放大镜的坐标
print(driver.find_element_by_xpath("//*[@content-desc='搜索']").size["width"])#输出“搜索”放大镜的宽度
print(driver.find_element_by_xpath("//*[@content-desc='搜索']").get_attribute("enabled"))#输出“搜索”放大镜的enabled属性值
————————————————
版权声明:本文为CSDN博主「YifLiu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/E_I_F/article/details/105374076
滑动:有惯性慢一点swipe,好用
driver.swipe(100,2000,100,100,5000)#用5秒的时间,向下滑动900个像素点
driver.swipe(100,1000,100,100,5000)#用5秒的时间,向下滑动900个像素点
滑动3drag:好用
bluetooth=driver.find_element_by_xpath("//*[@text='蓝牙']")
light=driver.find_element_by_xpath("//*[contains(@text,'显示')]")
driver.drag_and_drop(light,bluetooth)
滑动2:scroll,不好用
bluetooth=driver.find_element_by_xpath("//*[@text='蓝牙']")
light=driver.find_element_by_xpath("//*[contains(@text,'显示')]")
driver.scroll(light,bluetooth)#从蓝牙滑动到无线网络
手机分辨率:
print(driver.get_window_size())#输出手机的分辨率(宽度和高度),{'width': 1080, 'height': 1920}
print(type(driver.get_window_size()))#输出分辨率的类型(字典型)<class 'dict'>
print(driver.get_window_size()["width"])#输出分辨率中的宽度值,1080
print(type(driver.get_window_size()["width"]))#输出分辨率中的宽度值的类型(int),<class 'int'>
手机截图:
driver.get_screenshot_as_file("test.png")#屏幕截图,存在当前工作路径下,截图名称test.png
查看网络状态:
from appium.webdriver.connectiontype import ConnectionType
print(driver.network_connection)#返回当前网络关启状态 1:飞行模式 2:只开wifi 4:只开流量 6:网络全开
driver.set_network_connection(ConnectionType.AIRPLANE_MODE)#设置网络网络关启状态为飞行模式,导入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`
华为手机多屏协同连接电脑测试:
import time
import pytest
from appium import webdriver
import os
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '10.0'
desired_caps['deviceName'] = '17AHDU20619001673'
# desired_caps['appPackage'] = "com.android.settings"
# desired_caps['appActivity'] = ".HWSettings bnds"
desired_caps['noReset'] = True
desired_caps['fullReset'] = False
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
size=driver.get_window_size()
print(size)
#def swipe(self, start_x, start_y, end_x, end_y, duration=None):
driver.open_notifications()
driver.implicitly_wait(5)
driver.find_element_by_xpath("//*[contains(@text,'连接')]").click()
#driver.find_element_by_id("android:id/right_icon").click()
driver.implicitly_wait(5)
driver.find_element_by_id("com.huawei.pcassistant:id/iv_switch_screen").click()
time.sleep(3)
#driver.swipe(0,2277,0,0,1000)
#driver.swipe(100,1000,100,100,1000)
#driver.quit()
打开控制中心:#通过设置坐标打开控制中心,查看swipe的源码
driver.swipe(800, 0, 1000, 500, 1000)#通过设置坐标打开控制中心,查看swipe的源码
源码:
def swipe(self, start_x, start_y, end_x, end_y, duration=None):
action = TouchAction(self)
action \
.press(x=start_x, y=start_y) \
.wait(ms=duration) \
.move_to(x=end_x, y=end_y) \
.release()
action.perform()
return self
monkey命令:
最基础:所有应用乱点:
adb shell monkey 30
查看包命
adb shell pm list packages-3
特定应用执行100次
adb shell monkey -p com.netease.cloudmusic 100
详细点:
adb shell monkey -p com.netease.cloudmusic -vv 100
加个延时:
adb shell monkey --throttle 500 -p com.netease.cloudmusic -vv 100
加seed值:复现问题,保存在桌面
adb shell monkey -s 1645462974696 --throttle 500 -p com.netease.cloudmusic -vv 100 > 1.txt
输出日志到指定路径:
adb shell logcat >> C:\Users\123\Desktop\1\1.txt
自动刷抖音:
import time
import pytest
from appium import webdriver
import os
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '10.0'
desired_caps['deviceName'] = '17AHDU20619001673'
desired_caps['appPackage'] = "com.ss.android.ugc.aweme"
desired_caps['appActivity'] = ".splash.SplashActivity"
# cmp=com.ss.android.ugc.aweme/.splash.SplashActivity
desired_caps['noReset'] = True
desired_caps['fullReset'] = False
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
@pytest.mark.repeat(100)
def test_tik():
# driver.start_activity("com.ss.android.ugc.aweme",".splash.SplashActivity")
driver.swipe(500, 500, 500, 200, 100)
time.sleep(30)
鼠标操作
鼠标右击:action.context_click(driver.find_element(By.ID,"kw"))
双击:action.double_click(driver.find_element(By.ID,"kw"))
鼠标悬停:
action.move_to_element(element)
鼠标滑动验证码:单元素拖动实现步骤
action.drag_and_drop_by_offset(source=element,xoffset=260,yoffset=0)
鼠标拖动事件:两个参数
source=driver.find_element(By.ID,"div1") target=driver.find_element(By.ID,"div2") action=ActionChains(driver) action.drag_and_drop(source="",target="")action.perform()
action.perform()才执行
鼠标右击:action.context_click(driver.find_element(By.ID,"kw"))
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
action=ActionChains(driver)
#鼠标右击
action.context_click(driver.find_element(By.ID,"kw"))
action.perform()
time.sleep(3)
driver.quit()
鼠标悬停:
action.move_to_element(element)
键盘操作:
加cookies保持登录状态---好用
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
driver=webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(5)
driver.get("https://www.baidu.com/")
cookies={
"name":"BDUSS",
"value":"kNXakFTczJaQUdBalVTd21KMXp2ZnJjU2RpZHc4LXhoQTlJc1B2WHlvZ1FHdjFpRVFBQUFBJCQAAAAAAAAAAAEAAAC0OtQyy~3LtcTj0rLU2tCmYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCN1WIQjdVia"
}
driver.add_cookie(cookies)
driver.refresh()
time.sleep(5)
monkey 命令
adb shell monkey -p 包名 + 100次
adb shell monkey -p 包名 -v -v -s 10 100次
adb shell monkey -p 包名 -v -v --throttle 3000 -s 10 100次
模拟点击事件
adb shell input tap x,y(坐标)
模拟滑屏事件
adb shell input swipe startx starty endx endy
模拟键盘操作:
adb shell input keyevent 键值(3home 4back 66回车)
模拟输入
adb shell input text wifi
多设备指定
adb -s xxxxxxx shell input keyevent 4
获取当前包名:
关闭app
ele=driver.find_element(By.XPATH,"//*[@text='京东']")
ele.click()
元素定位id:
baihuo=driver.find_element(By.ID,"com.jingdong.app.mall:id/gw")
baihuo.click()
数据驱动