appium自动化尝试

监控启动的应用包名

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

获取当前包名:

# 获取包名
driver.current_package
# 获取界面名
driver.current_activity

关闭app

# 关闭当前操作的 app ,不会关闭驱动对象
driver.close_app()
# 关闭驱动对象,同时关闭所有关联的 app
driver.quit()
元素定位xpath:
ele=driver.find_element(By.XPATH,"//*[@text='京东']")
ele.click()

元素定位id:

baihuo=driver.find_element(By.ID,"com.jingdong.app.mall:id/gw")
baihuo.click()

数据驱动

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值