复习appium基础api


导包
from appium import webdriver

driver 参数解释:
desired_caps['platformName'] = 'Android'
# 必填-且正确
desired_caps['platformVersion'] = '5.1'
# 必填 命令:adb devices
desired_caps['deviceName'] = '192.168.56.101:5555'
# APP包名 命令 adb shell dumpsys window windows | findstr usedApp
desired_caps['appPackage'] = 'com.android.settings'
# 启动名
desired_caps['appActivity'] = '.Settings'
# 获取driver
drvier=webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)

    1). http://127.0.0.1:4723/wd/hub :为apium远程节点地址,这个地址可以使用Ctrl+P获取到,注意修改端口。
    2). desired_caps :为字典,字典名可以随便写,但是字典内键名必须为固定,此字典以后就是移动应用自动化的前置代码。

driver常用方法

1. 启动app 方法
start_activity("包名","启动名")
说明:应用场景 跨应用时使用。
2. 关闭app 方法
 driver.close_app()
说明:只关闭由Appium启动的默认app应用
3. 关闭driver
driver.quit()
说明:关闭所有由Appium启动的应用

Appium基础API
1. Appium安装app方法:
    driver.install_app("路径(不能为相对路径)")

   driver.install_app(os.getcwd() + os.sep + "1.5_电池.apk")

    【adb install 目录\文件名.apk】
2. Appium卸载app方法:
    driver.remove_app("包名")
    【adb uninstall 包名】
3. Appium判断是应用否安装
     driver.is_app_installed("包名")
提示:
    1. 如果已安装返回True,未安装返回False
    2. os.getcwd():获取当前文件所在目录的绝对路径
    3. os.sep:动态获取"/"或”\“ windows获取的是"\" MAC获取的是”/“
    4. 如果app文件够大,会包超时异常(默认appium后台等待20时间如果没反馈结果抛出超时异常)
    (解决:try一下)
4. 发送文件到手机
driver.push_file("手机路径/文件名",base64data格式数据流)
如何转为base64?
with open("./test222.txt","r",encoding="utf-8") as f:
    data=str(base64.b64encode(f.read().encode("utf-8")),"utf-8")

driver.push_file('sdcard/test002.txt', data)


5. 从手机拉取文件
drive.pull_file("手机内目录/文件路径")

data=driver.pull_file("/sdcard/test222.txt")
data=str(base64.b64decode(data),"utf-8")

将数据流写入指定目录下文件
with open("./test333.txt","w",encoding="utf-8")as f:
f.write(data)

6. 获取当前页面结构方法
driver.page_source
返回:以xml格式返回当前页面结构
1. 确定appium定位元素时的有效范围,只在当前显示页面有效。如果需要定位当前页面之外的外的元素,必须进行相应的处理 如:滚动 滚动条。


四、Uiautomatorviewer工具
    定位元素,查看元素属性使用。
2. Uiautomatorviewer来源:Android-sdk工具包
3. 如何使用?
    1. cmd 命令输入:Uiautomatorviewer
    2. 快速输入方式:复制Uiautomatorviewer 更改名 ui --》命令行内输入ui  

       uiautomator.bat--》双击
4. 如何定位?
    1. 点击左侧任意小手机图标,捕获当前页面,选择要查看的元素进行点击
5. 关注点:
    1. text
    2. resource-id
    3. class
五、元素定位API

常用定位方法:
1. id 元素resource-id属性
    1). 方法:driver.find_element_by_id("resource-id")
2. class 元素 class 属性
    1). 方法:driver.find_element_by_class_name("class")
3. xpath 表达式
    1). 方法:driver.find_element_by_xpath("//*[contains(@属性,"属性包含的值")]") 【推荐】
    2). 方法:driver.find_element_by_xpath("//*[@属性='全部匹配属性值']")
5.3 定位一组元素:
    1. driver.find_elements_by_id()
    2. driver.find_elements_by_class_name()
    3. driver.find_elements_by_xpath()

提示:
1. 无论以上那种方法,返回的值都为列表。
2. 列表访问,必须提供下标或遍历。
5.4 元素等待
为了避免在执行定位元素代码时,元素未加载出来,抛出异常。
给元素设置一个查找有效时间,在第一次未找到时被激活。
元素等待分类:
1. 隐式等待
说明:设置等待时间,针对全局元素有效。
特点:全局元素生效;
方法:driver.implicitly(30)
2. 显示等待
设置等待时间,针对当前元素有效。
特点:只对单个元素生效;
优点:改变访问查找元素频率
缺点:针对单个元素有效,弥补这个缺点:封装
方法:WebDriverWait(driver,timeout=30,poll=0.5).until(lambda x:x.find_element_by_id("..."))

注意事项:
    1. appium框内其实没有提供等待方法。
    2. 要使用等待必须导入selenium等待方法。
    3. WebDriverWait位置:from selenium.webdriver.support.wait import WebDriverWait
    (建议使用快速导包:Ctrl+Alt+空格/Alt+回车)
5.5 注意事项:
    1. 元素的id,属性原名为:resource-id:
    2. 定位方法是 driver.find_element_by_id("resource-id")
    3. xpath://*[contains(@属性,"属性值")]



六、元素获取信息操作API
1. 点击
方法:element.click()
2. 文本框输入内容
方法:element.send_keys("内容")
3. 清除
方法: element.clear()
4. 获取属性
方法:get_attribute("属性值")
属性值:
1). name: content-desc / text (哪个有值返回哪个)
2). className: 获取元素class属性值
3). resourceId:获取元素resource-id属性值
4). text:获取元素text属性值

5. 获取元素坐标位置
方法:element.location
应用场景:如基于坐标滑动或基于坐标点击
注意:
1. location返回的值为:字典
2. 字典访问:
1). des['键名']
2). des.get('键名') 【推荐】

区别:
des.get('键名')当键名不存在时,返回为空。
des[‘键名’]:当键名不存在时,会报异常。


提示:
1. 解决输入中文问题:
desired_caps['unicodeKeyboard']=True
desired_caps['resetKeyboard']=True

问题:
1. 解决Appium0.28版库 InvalidArgumentException异常问题!!!
1). 如果不更换 Appium-Python-Client版本解决方法:
在site-packages --》selenium.common.exceptions.py中直接定义了InvalidArgumentException,代码如下
class InvalidArgumentException(WebDriverException):
"""
"""
pass

2). 更换版本解决方法:
1. 卸载现有的0.28版本
pip uninstall Appium-Python-Client
2. 安装指定版本的Appium库
pip install Appium-Python-Client==0.26

2. html中元素的三个属性 id\name\class作用及区别:
1. id: 一般情况为唯一
2. name:可以重名
3. class:多个命名

desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True

desired_caps['automationName'] = 'Uiautomator2'
desired_caps['autoGrantPermissions'] = 'true'

相关