目录

前言

1.通过appium启动app

2.获取包名和界面名

3.关闭app及驱动

4、安装卸载app以及判断是否安装app

5、将应用置于后台运行

6.元素定位

7.元素操作


前言

Appium通信原理:Client端发送自动化指令给Appium server,Appium Server接收到client发送的指令后,转换为移动端能够识别的指令,然后发送给移动端设备,并对移动端设备进行操作。

1.通过appium启动app

driver.start_activity("包名","界面名")

2.获取包名和界面名

driver.current_package 获取当前脚本运行中的app包名

driver.current_activity 获取当前脚本运行中的app的界面名

3.关闭app及驱动

关闭app driver.close_app() 不需要跟参数

关闭驱动 driver.quit()

区别 :
关闭 app 之后,可以再使用其他代码启动新的 app
关闭驱动,那么代码与 appium 服务器之间的连接已经断,开不能
再做任何的操作。

4、安装卸载app以及判断是否安装app

安装 app driver.install _app(apk 路径 )
卸载 app driver.remove_app(app 包名 )
判断手机是否安装: app driver.is_app_installed(" 包名 ")
返回值: True 有安装 app 或者 False 没有安装 app

5、将应用置于后台运行

driver.background_app(seconds)  #seconds 表示的是将 app 置于后台运行多少秒的时间.
uiautometorview 工具使用
通过 uiautomatorviewer 工具可以查看 app 的元素信息。
获取 app 页面信息时不能正在运行代码,会占用adb 服务。建议将页面保存再测试.提高工作效率.
为了提高效率,在 android sdk tools 目录下,将 uiautomatorviewer.bat复制一份出来,并修改为 ui.bat OK 了。后续直接在dos 中输入 ui 就可以打开了.

6.元素定位

6.1、定位单个元素

6.1.1 通过ID定位元素

通过元素的resource-id来进行元素定位

driver.fifind_element_by_id(resource_id的值)

6.1.2 通过class_name定位元素

通过元素的class属性值来进行元素定位

app中,class的值始终都只有一个。

driver.fifind_element_by_class_name(class)

6.1.3 通过xpath定位元素

通过xpath的元素属性来进行元素定位

driver.fifind_element_by_xpath("//*[@text='value']")

单个元素定位不到会报错

6.2、定位一组元素

driver.fifind_elements_by_id(resource_id)

driver.fifind_elements_by_class_name(class_name)

driver.fifind_elements_by_xpath(xpath)

driver.fifind_elements(By.ID, value)

返回的值是一个列表,如果没有找到,说明列表是空值,可以通过 下标来使用其中的元素对象,下标是从0开始。

import time
from appium import webdriver
from selenium.webdriver.common.by import By
from utils import get_element

des_cap = {
    "platformName": "android",
    "platformVersion": "5.1.1",
    "deviceName": "****",
    "appPackage": "com.baidu.homework",
    "appActivity": ".activity.init.InitActivity",
    "resetKeyboard": True,        # 重置设备的输入键盘
    "unicodeKeyboard": True        # 采用unicode编码输入
    "noReset": True # 用来记住app的session,如果有登陆或做过初始化的操作,为True时,后面不需要再操作
}

driver = webdriver.Remote("http://localhost:4723/wd/hub", des_cap)

jump_element = By.XPATH,"//*[@text='跳过']"
get_element(driver,jump_element).click()
time.sleep(2)

stu_element = By.XPATH,"//*[@text='学生']"
get_element(driver,stu_element).click()
time.sleep(2)

one_grade_element = By.ID,"com.baidu.homework:id/identity_student"
get_element(driver,one_grade_element).click()
time.sleep(2)

success_element = By.CLASS_NAME,"android.widget.TextView"
get_element(driver,success_element).click()
time.sleep(3)
driver.quit()
from selenium.webdriver.support.wait import WebDriverWait

def get_element(driver, elements):
    wait = WebDriverWait(driver,30,1)
    element = wait.until(lambda x:x.find_element(elements[0],elements[1]))
    return element

7.元素操作

7.1 、点击操作
element.click() 针对元素进行点击操作
7.2、清空和输入操作
element.clear() 针对元素进行清空操作
element.send_keys("value") 针对元素进行输入操作
7.3 、输入的封装
# 为了保证代码的健壮性,确定输入的内容一定不会出错,所以在输入前做了一次清除。
def input_text(element, text):
    """
   :param element: 表示的是元素对象
   :param text: 表示的是要输入的内容
   :return:
   """
    # 清除元素中的文本内容
    element.clear()
    # 输入文本内容
    element.send_keys(text)
7.4 、获取元素的信息
获取元素的文本内容 ( 获取的是元素 text 属性的内容 )
element.text
获取元素的位置
element.location 返回的值是一个字典,字典中包含 x y x 和y 表示的是元素在手机屏幕左上角的点的坐标
获取取元素的大小
element.size 返回值是一个字典,字典中会包含 width 和 height, width 表示的宽度, height 表示的高度
获取元素的属性值
element.get_attribute("attribute")  # attribute 表示的是属性名称
获取 ID 值时, attribute= “resourceId”
获取的是 class 的值 , attribute="className"
如果 attribute = "name" 时,获取的是 text 或者 content-desc( text 优先,找不到 text 值,再去找 content-desc 的值)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐