python+appium(1)

一、下载JDK

JDK是 Java 语言的软件开发工具包,JDK(TM)8 64位简而言之就是一款针对java编程的软件工具,是学习java编程的第一步。JDK作为Java语言的软件开发工具包,主要用于移动设备、嵌入设备的应用程序。LDK的全称Java Development Kit,是Java语言的软件开发工具包,是整个java开发的核心,包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
JDK1.8.0_131下载地址

配置环境变量:
在这里插入图片描述

二、下载SDK

目前官网上已经没有单独的SDK下载安装包了。目前官网推荐的是下载包含有Android SDK的Android Studio。下载地址

由于这个Android Studio 的安装包过大且官网下载需要翻墙,而咱们在用Appium 的时候实际上只需要用到SDK 工具而已。所以推荐大家去另外一个国内的Android 工具的下载网站下载。下载地址
在这里插入图片描述

三、安装安卓版本

打开SDK Manager.exe
勾选 platform-toolsbuild-tools和需要下载的版本
点击Install packages下载
在这里插入图片描述

在这里插入图片描述
配置环境变量:见图一

文件结构
https://pan.baidu.com/s/1DH65jAfRHsvqOjGYKO5WZg
kc80在这里插入图片描述

四、下载node.js

下载地址
在这里插入图片描述
安装node.js,安装一路点下一步就行
配置环境变量:见图一

五、下载appium

官网
自己保存在百度云盘的地址
提取码:ujwc

下载后双击进行安装即可
在这里插入图片描述
在这里插入图片描述
安装 Appium-Python-Client
在这里插入图片描述
或使用pip install Appium-Python-Client

六、打开并配置appium

1.点击编辑配置,配置jdk和sdk路径
在这里插入图片描述
在这里插入图片描述
2.链接手机

adb devices查看是否连接成功
在这里插入图片描述

3.启动服务器并配置信息

输入命令:adb shell am monitor
然后启动需要获取包名的应用

adb logcat -c //清除logcat内容
adb logcat ActivityManager:I *:s //仅输出标记为“ActivityManager”并且优先级大于等于“Info”的日志,*:S用于设置所有标记的日志优先级为S(无记载,最高优先级,没有什么会被记载)
然后启动需要获取ActivityName的应用

在这里插入图片描述
在这里插入图片描述

  • platformName: 系统

  • platformVersion:系统版本
    查看内核版本号:adb shell getprop ro.build.version.release

  • deviceName: 手机设备名称
    adb devices -l中model查看设备名称

  • appPackage: apk包名
    adb shell dumpsys activity | findstr “mResume”查看包名和activity(需先打开手机应用)

    adb logcat | find “START”,再打开软件
    在这里插入图片描述

  • appActivity: appActivity

  • unicodeKeyboard:设置编码格式为unicode

  • resetKeyboard: 是否隐藏手机键盘

  • noReset :是否初始化,不加就要设置权限

{
  "platformName": "Android",
  "platformVersion": "8.1.0",
  "deviceName": "MI_PAD_4",
  "appPackage": "com.flychord.altas.masterpiano.test",
  "appActivity": "com.flychord.piano.module_home.InitializePageActivity",
  "noReset": true
}

启动成功
在这里插入图片描述

七.代码案例

from appium import webdriver
# from selenium.webdriver.common.by import By
import time
from appium.webdriver.common.mobileby import AppiumBy as By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec

"""
封装显示等待
1.需要导包
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec

2.语法
wait=WebDriverWait(driver, 超时时间, 刷新频率时间)
wait.until(ec模块函数名())

3.ec模块函数
title_contains:判断当前页面title是否包含预期值
    例:ec.title_contains('预期值')
visibility_of_element_located:判断元素在页面中是否可见
    例:ec.visibility_of_element_located((By.ID, value))
element_to_be_clickable:判断元素在页面中是否可见并可点击
    例:ec.element_to_be_clickable((By.ID, value))
text_to_be_present_in_element:判断某个元素中的text是否 包含 了预期的字符串
    例:ec.text_to_be_present_in_element((By.ID, value),'预期的字符串')
text_to_be_present_in_element_value:判断某个元素中的value属性是否 包含 了预期的字符串
    例:ec.text_to_be_present_in_element_value((By.ID, value),'预期的字符串')
frame_to_be_available_and_switch_to_it:判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
    例:ec.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, 'iframe[class="login_iframe"]'))
element_located_selection_state_to_be:判断某个元素是否被选中了,一般用在下拉列表
    例:ec.element_located_selection_state_to_be((By.ID, value),'下拉框中某个数据')
alert_is_present:判断页面上是否存在alert
    例:ec.alert_is_present()
"""


def visibility(driver, type, value):
    return WebDriverWait(driver, 10).until(ec.visibility_of_element_located((type, value)))


def clickable(driver, type, value):
    return WebDriverWait(driver, 10).until(ec.element_to_be_clickable((type, value)))


caps = {}
caps["appPackage"] = "软件包名"
caps["platformName"] = "Android"
caps["platformVersion"] = "10"
caps["deviceName"] = "S96PROEEA0000046726"
caps["appActivity"] = "进入软件第一个Activity"
caps["noReset "] = False

driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
# 点击仅在使用此应用时允许(位置权限)
location_permission_id = 'com.android.permissioncontroller:id/permission_allow_foreground_only_button'
visibility(driver, By.ID, location_permission_id).click()
# 点击允许(存储权限)
storage_permissions_id = 'com.android.permissioncontroller:id/permission_allow_button'
visibility(driver, By.ID, storage_permissions_id).click()
# 点击隐私协议同意按钮
privacy_agreement_consent_id = 'com.ysb.yinshenbao_bd_android:id/tv_agree'
visibility(driver, By.ID, privacy_agreement_consent_id).click()
# 点击进入首页按钮
go_index_id = 'com.ysb.yinshenbao_bd_android:id/tv_to_main'
visibility(driver, By.ID, go_index_id).click()

i = 0
p = 1
lists = ['故宫', 'hgcxxg$_-+']
while (i == 0):
    # 开始时间
    start_time = time.time()
    # 点击搜索框
    search_box_id = 'com.ysb.yinshenbao_bd_android:id/text_main_search'
    visibility(driver, By.ID, search_box_id).click()

    # 搜索框输入故宫
    search_box_id2 = 'com.ysb.yinshenbao_bd_android:id/edit_search'
    visibility(driver, By.ID, search_box_id2).send_keys(lists[p % 2])  # 根据p奇偶取lists内值

    # 点击搜素按钮
    search_box_id = 'com.ysb.yinshenbao_bd_android:id/tv_search'
    visibility(driver, By.ID, search_box_id).click()

    # 有搜索结果点击搜素到的第一个内容,无搜索结果点击返回按钮
    try:
        # 2秒内没显示【无搜索结果】即为有结果
        WebDriverWait(driver, 2).until(ec.visibility_of_element_located((By.XPATH, '//*[@text="无搜索结果"]')))
        back_id = 'com.ysb.yinshenbao_bd_android:id/image_back'
        visibility(driver, By.ID, back_id).click()
    except Exception:
        # 点击搜索到的第一个结果
        search_content_xpath = '//*[@resource-id="com.ysb.yinshenbao_bd_android:id/recyclerview_poi"]/android.widget.RelativeLayout[1]'
        visibility(driver, By.XPATH, search_content_xpath).click()

    # 点击菜单按钮
    menu_id = 'com.ysb.yinshenbao_bd_android:id/btn_set'
    visibility(driver, By.ID, menu_id).click()
    # 点击深/浅色模式切换
    toggle_mode_xpath = '//*[@text="深/浅色模式切换"]'
    visibility(driver, By.XPATH, toggle_mode_xpath).click()
    # 点击确定按钮
    pattern_ok_id = 'com.ysb.yinshenbao_bd_android:id/btn_pos'
    visibility(driver, By.ID, pattern_ok_id).click()
    # 点击返回按钮
    back_id = 'com.ysb.yinshenbao_bd_android:id/image_back'
    visibility(driver, By.ID, back_id).click()

    # 结束时间
    end_time = time.time()
    # 耗时
    run_time = end_time - start_time
    print(f'第{p}返回到主界面成功,用时:{run_time}')
    p += 1

driver.quit()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值