首页 > 其他分享 >App自动化

App自动化

时间:2023-08-14 22:36:33浏览次数:40  
标签:包名 Remote App 自动化 driver caps time import

Appium 基础

安装 APK

import time
from appium.webdriver import Remote

# apk 的路径
file = r'apk路径'
caps = {"platformName": "Android",
        "deviceName": "设备号",  # 可通过 adb devices 或者 adb get-serialno 获取
        "app": file}
driver=Remote(command_executor='http://127.0.0.1:4723/wd/hub',desired_capabilities=caps)  # 4723要与Appium客户端的端口号对应,4723为默认值
time.sleep(5)
driver.quit()

启动 APK

'''
获取apk包名
adb shell dumpsys activity activities | find "mFocusedActivity"
aapt dumpsys badging 电脑端apk路径  通过应用查看包名(配置aapt环境变量,或在aapt.exe路径下运行)
adb logcat | findStr -i displayed
adb shell pm list package -s  查询系统apk包名
adb shell pm list package -3  查询第三方apk包名
adb shell am monitor  查看将要启动或退出app的包名
adb shell dumpsys window windows | findstr mFocusedApp  查看当前界面的app的包名
adb shell dumpsys activity top | find "ACTIVITY"  查看启动的app的包名
adb shell dumpsys activity activities | findstr "Run"  查看所有启动的应用的包名
adb shell dumpsys window w |findstr \/ |findstr name=  查看当前启动应用的包名
'''
import time
from appium.webdriver import Remote

caps = {"platformName": "Android",
        "deviceName": "设备号",
        "appPackage": "包名",
        "appActivity": ".guide.SplashActivity",
        "noReset": True}  # 不要停止应用程序,不要清除应用数据
driver = Remote(command_executor='http://127.0.0.1:4723/wd/hub', desired_capabilities=caps)
time.sleep(2)
driver.quit()

查找元素

import time
from appium.webdriver import Remote

caps = {"platformName": "Android",
        "deviceName": "设备号",
        "appPackage": "包名",
        "appActivity": ".guide.SplashActivity",
        "noReset": True}
driver = Remote(command_executor='http://127.0.0.1:4723/wd/hub', desired_capabilities=caps)

# 隐性等待
driver.implicitly_wait(10)

# 找元素
# xpath定位://class[@属性="值"]
xpath = "//android.widget.ImageView[@resource-id='resource-id值' and @index='1']"
el = driver.find_element("xpath", xpath)
# el = driver.find_element("class name","android.widget.ImageView")
print(el)
print(el.text)  # 打印文本
print(el.rect)  # 打印该元素的坐标点以及长宽
print(el.get_attribute('class'))
el.click()

time.sleep(3)
driver.quit()

显性等待

import time
from appium.webdriver import Remote
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

caps = {"platformName": "Android",
        "deviceName": "设备号",
        "appPackage": "包名",
        "appActivity": ".activity.MainActivity",
        "noReset": True}
driver = Remote(command_executor="http://127.0.0.1:4723/wd/hub", desired_capabilities=caps)

xpath = '//android.widget.ImageView[@resource-id="com.qiduo.mail:id/titlebar_toggle_slidingmenu_btn"]'

# 显性等待
locator = ("xpath", xpath)
wait = WebDriverWait(driver, timeout=8)
wait.until(expected_conditions.presence_of_element_located(locator))

el = driver.find_element("xpath", xpath)
print(el.text)
print(el.rect)

el.click()
time.sleep(3)
driver.quit()

打开 APP 指定到的活动页面

import time
from appium.webdriver import Remote

caps = {"platformName": "Android",
        "deviceName": "设备号",
        "appPackage": "包名",
        "appActivity": ".activity2.MainActivity",
        "noReset": True}
driver = Remote(command_executor="http://127.0.0.1:4723/wd/hub", desired_capabilities=caps)
driver.implicitly_wait(10)
# driver.start_activity("包名", "活动页面名称")
driver.start_activity("包名", ".activity2.LoginActivity")  # 打开app指定到的活动页面

# send_keys
driver.find_element("id","定位元素1").send_keys("123456")  # 账号
driver.find_element("id","定位元素2").send_keys("abcdef")  #密码
driver.find_element("id","定位元素3").click()  # 登录

time.sleep(3)
driver.quit()

滑动页面

import time
from appium.webdriver import Remote

caps = {"platformName": "Android",
        "deviceName": "设备号",
        "appPackage": "包名",
        "appActivity": ".activity2.MainActivity"}
driver = Remote(command_executor="http://127.0.0.1:4723/wd/hub", desired_capabilities=caps)
time.sleep(2)
# 获取屏幕尺寸
size = driver.get_window_size()
print(size)
width = size["width"]
height = size["height"]

# 从右往左滑动 driver.swipe(起始点x坐标, 起始点y坐标, 结束点x坐标, 结束点y坐标, 滑动的时间间隔(可以省略))
driver.swipe(width * 0.9, height * 0.5, width * 0.1, height * 0.5, 1000)
driver.implicitly_wait(10)

driver.find_element("id", "定位元素1").click()
driver.find_element("id", "定位元素2").click()
time.sleep(3)
driver.quit()

按键操作

import time
from appium.webdriver import Remote


class Key(object):
    """对按键进行封装"""
    enter = 66
    home = 3
    volume_up = 24
    volume_down = 25


def press_enter(driver):
    """对 enter 键进行单独的封装"""
    driver.press_keycode(Key.enter)


def press_home(driver):
    """对 home 键进行单独的封装"""
    driver.press_keycode(Key.home)


caps = {"platformName": "Android",
        "deviceName": "设备号",
        "appPackage": "包名",
        "appActivity": ".activity2.MainActivity",
        "noReset": True}
driver = Remote(command_executor="http://127.0.0.1:4723/wd/hub", desired_capabilities=caps)

# 音量+
time.sleep(3)
driver.press_keycode(Key.volume_up)  # 音量+键

time.sleep(2)
# 按下home进一步的封装
press_home(driver)

time.sleep(2)
driver.quit()

手机 toast 弹窗处理

import time
from appium.webdriver import Remote

caps = {"platformName": "Android",
        "deviceName": "设备号",
        "appPackage": "包名",
        "appActivity": ".activity2.MainActivity",
        "automationName": "UiAutomator2",
        "noReset": True}

driver = Remote(command_executor="http://127.0.0.1:4723/wd/hub", desired_capabilities=caps)
driver.implicitly_wait(10)
time.sleep(3)
driver.start_activity("包名", ".activity2.LoginActivity")

driver.find_element("id", "元素").click()  # 登录

# 定位 toast
toast = driver.find_element("xpath", "//android.widget.Toast")  # 固定语法
# toast = driver.find_element("xpath", "//*[contains(@text, '用户名和密码不能为空')]")  # 通过toast文本定位
print(toast.text)

time.sleep(3)
driver.quit()

webview 处理(H5页面)

  • class 中,存在android.webkit.WebView需要用 webview 来处理

  • 谷歌浏览器访问chrome://inspect确认手机 webview 版本,下载chromedriver.exe驱动

    Snipaste_2023-07-31_20-52-36

  • webview 中的元素可以通过 UC 开发者工具定位,在设置中选择本地 Devtools Inspector UI 资源,在'Home'中点击inspect即可查看

    Snipaste_2023-07-31_21-01-52

import time
from appium.webdriver import Remote

caps = {"platformName": "Android",
        "chromedriverExecutableDir": r"D:\code\appium_record",  # 驱动位置
        "deviceName": "设备号",
        "appPackage": "包名",
        "appActivity": ".activity.MainActivity"}
driver = Remote(command_executor="http://127.0.0.1:4723/wd/hub", desired_capabilities=caps)
driver.implicitly_wait(10)

# 点击 师资团队 进入web页面
driver.find_element("xpath", "//*[@text='text的文本信息']").click()
time.sleep(5)

# 打印所有的上下文
print(driver.contexts)

# 上下文切换
driver.switch_to.context(driver.contexts[-1])
# driver.switch_to.context('WEBVIEW的名称')

# 注意:有时候一个页面会包含多个标签
print(driver.window_handles)

# 点击查看全部
driver.find_element("xpath", "//*[@id='__impage-component-wrapper-1']/section/div[1]/div/span/span").click()

time.sleep(3)
driver.quit()

标签:包名,Remote,App,自动化,driver,caps,time,import
From: https://www.cnblogs.com/HollowPan/p/17629956.html

相关文章

  • Web自动化_分布式测试Grid入门
    要在多台计算机上并⾏运⾏测试吗?那么,Grid正是为你准备的。分布式测试Grid环境:1.需要JDK支持,最新的版本需要11版本,老版本的1.8seleniumserverjar包下载地址:https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.5.0单机模式:启动命令:java-jar包名<一定要用ta......
  • Apipost接口自动化控制器使用详解
    测试人员在编写测试用例以及实际测试过程中,经常会遇到两个棘手的问题:稍微复杂一些的自动化测试逻辑,往往需要手动写代码才能实现,难以实现和维护测试用例编写完成后,需要手动执行,难以接入自动化体系这里,小编在Apipost自动化测试中还原了用户在电商平台购物实例,并利用这个实例来给大家......
  • webkit webApp 开发技术要点总结
    如果你是一名前端er,又想在移动设备上开发出自己的应用,那怎么实现呢?幸好,webkit内核的浏览器能帮助我们完成这一切。接触webkitwebApp的开发已经有一段时间了,现把一些技巧分享给大家:1.viewport:也就是可视区域。对于桌面浏览器,我们都很清楚viewport是什么,就是出去了所有工具栏、......
  • virtualenvwrapper 使用流程
    virtualenvwrapper使用流程virtualenvwrapper基于virtualenv,可以更方便的管理Python虚拟环境,virtualenvwrapper-win依赖于virtualenv,所以也要安装virtualenv。需要注意的是,virtualenvwrapper在Windows系统中只能通过cmd才能正常使用一、安装virtualenvwrapper-win......
  • Apipost接口自动化控制器使用详解
    测试人员在编写测试用例以及实际测试过程中,经常会遇到两个棘手的问题:•稍微复杂一些的自动化测试逻辑,往往需要手动写代码才能实现,难以实现和维护•测试用例编写完成后,需要手动执行,难以接入自动化体系这里,小编在Apipost自动化测试中还原了用户在电商平台购物实例,并利用这个实例来......
  • # yyds干货盘点 # 盘点一个Python自动化办公的实战案例——批量合并Excel文件(上篇)
    大家好,我是皮皮。一、前言前几天在Python星耀群【维哥】问了一个Python自动化办公处理的问题,一起来看看吧。大佬们好,请教一个Python自动化办公的问题,我有一个文件夹,里边有多个Excel文件,分别是员工8月份绩效表格,每一个表格里边都是固定的两列,分别是日期和绩效得分,如下图所示:现在他想......
  • Application创建过程-1
     一、概述system进程和app进程都运行着一个或多个app,每个app都会有一个对应的Application对象#######(该对象跟LoadedApk一一对应)。下面分别以下两种进程创建Application的过程:1.system_server进程;2.app进程;二、system_server进程2.1SystemServer.run[->SystemSer......
  • 极其强烈推荐的手机无人直播app下载
    手机无人直播app,商家自动直播app全面迎来了大爆发。相比数字人无人直播价格昂贵。手机无人直播则是算不上任何的投入成本。两支手机+一个手机无人直播APP+一套声卡几块块钱,就可实现7X24X365无人直播的梦想。这种市场需求性可以说是全国1.4亿线下实体商户的刚性需求。魔棒手机无人直......
  • 深入思考 Next.js App Directory 架构
    写在前面:新的App目录架构一直是最近Next.js发布的主要亮点,这一点引发了许多讨论。在这篇文章中,AtilaFassina探讨了这种新策略的优势和风险,并反思了您是否应该立即在生产环境中使用它。自从Next.js13release发布以来,关于其描述的新功能的稳定性引发了一些争议。我们在“W......
  • uni-app中html5+开发记录
    代码示例:1、创建dom并绑定click事件 btnBack=newplus.nativeObj.View('btnBack',{top:systemInfo.statusBarHeight+'px',//此处top和left是相对于手机屏幕左上角为基准,不支持rightleft:'10px',height:&......