常用Appium API
以最右App为例
.apk文件网盘地址:
链接:https://pan.baidu.com/s/1L4MYkhpb5ECe8XeaneTx_Q
提取码:0jqm
操作类API
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/22 21:05
import unittest
import time
from appium import webdriver
class AndroidTests(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '10'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['noReset'] = 'True'
desired_caps['appPackage'] = 'cn.xiaochuankeji.tieba'
desired_caps['appActivity'] = '.ui.base.SplashActivity'
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
def tearDown(self):
print("执行结束!")
def test_operate_api(self):
self.driver.implicitly_wait(60)
time.sleep(8)
# 控件点击:click()
# 场景:点击关注按钮
ele = self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/title")
ele.click()
time.sleep(2)
# 点击搜索按钮
self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/ic_search_b").click()
time.sleep(3)
# 点击搜索输入框
ele_input = self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/search_input")
ele_input.click()
# 控件输入
ele_input.send_keys("123456")
time.sleep(2)
print(ele_input.text)
ele_input.clear()
time.sleep(2)
# 获取手机分辨率
height = self.driver.get_window_size()["height"]
width = self.driver.get_window_size()["width"]
print("手机分辨率是:" + str(height) + "*" + str(width))
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(AndroidTests)
unittest.TextTestRunner(verbosity=2).run(suite)
属性获取
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/22 21:05
import unittest
import time
from appium import webdriver
class AndroidTests(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '10'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['noReset'] = 'True'
desired_caps['appPackage'] = 'cn.xiaochuankeji.tieba'
desired_caps['appActivity'] = '.ui.base.SplashActivity'
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
def tearDown(self):
print("执行结束!")
def test_attribute(self):
self.driver.implicitly_wait(60)
time.sleep(8)
# 获取当前活动页面
current_activity = self.driver.current_activity
print(current_activity)
# 定位搜索按钮,赋值给ele_search
ele_search = self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/ic_search_b")
# 获取控件的属性值
# 获取控件的className
print(ele_search.get_attribute("className"))
# 获取控件的resourceId
print(ele_search.get_attribute("resourceId"))
# 判断控件是否显示
print(ele_search.is_displayed())
# 判断控件是否可用
print(ele_search.is_enabled())
"""
.ui.home.page.PageMainActivity
android.widget.ImageView
cn.xiaochuankeji.tieba:id/ic_search_b
True
True
执行结束!
"""
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(AndroidTests)
unittest.TextTestRunner(verbosity=2).run(suite)
swipe
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/22 21:05
import unittest
import time
from appium import webdriver
class AndroidTests(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '10'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['noReset'] = 'True'
desired_caps['appPackage'] = 'cn.xiaochuankeji.tieba'
desired_caps['appActivity'] = '.ui.base.SplashActivity'
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
def tearDown(self):
print("执行结束!")
def test_swipe(self):
self.driver.implicitly_wait(60)
time.sleep(8)
self.driver.swipe(500, 1000, 500, 2000) # 手势下拉
time.sleep(3)
self.driver.swipe(500, 2000, 500, 1000) # 手势上滑
time.sleep(3)
self.driver.swipe(500, 2000, 500, 2000, 100) # 点击
time.sleep(3)
self.driver.swipe(500, 2000, 500, 2000, 3000) # 长按
time.sleep(3)
# 获取手机分辨率
height = self.driver.get_window_size()["height"]
width = self.driver.get_window_size()["width"]
print("手机分辨率是:" + str(height) + "*" + str(width))
# 按照手机分辨率定位
self.driver.swipe(width * 0.463, height * 0.448, width * 0.463, height * 0.896, 100)
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(AndroidTests)
unittest.TextTestRunner(verbosity=2).run(suite)
TouchAction
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/22 19:26
import unittest
import time
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
class AndroidTests(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '10'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['noReset'] = 'True'
desired_caps['appPackage'] = 'cn.xiaochuankeji.tieba'
desired_caps['appActivity'] = '.ui.base.SplashActivity'
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
def tearDown(self):
print("执行结束!")
def test_touch_action(self):
self.driver.implicitly_wait(60)
time.sleep(8)
# 点击控件
# 点击搜索控件
ele = self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/ic_search_b")
TouchAction(self.driver).tap(ele).perform()
time.sleep(3)
# 坐标点击
# 点击坐标(150,150)
# 点击搜索框,出现键盘
TouchAction(self.driver).tap(x=150, y=150).perform()
time.sleep(2)
# 按压某个点
# 按压搜索框以外的空白处,键盘消失
TouchAction(self.driver).press(x=150, y=1040).release().perform()
time.sleep(2)
# 返回到推荐页面
self.driver.keyevent(4)
time.sleep(3)
# 长按某个点
# 长按第一条帖子
TouchAction(self.driver).long_press(x=500, y=600).release().perform()
time.sleep(2)
TouchAction(self.driver).press(x=500, y=600).release().perform()
time.sleep(2)
# 长按控件
# 长按第一条帖子
ele = self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/holder_flow_rmdv")
TouchAction(self.driver).long_press(ele).perform()
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(AndroidTests)
unittest.TextTestRunner(verbosity=2).run(suite)
keyevent
Android KEYCODE键值对:
参考地址:https://blog.csdn.net/shililang/article/details/14449527
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/22 19:26
import unittest
import time
from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class AndroidTests(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '10'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['noReset'] = 'True'
desired_caps['appPackage'] = 'cn.xiaochuankeji.tieba'
desired_caps['appActivity'] = '.ui.base.SplashActivity'
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
def tearDown(self):
print("执行结束!")
def test_key_event(self):
time.sleep(8)
# 返回键
self.driver.keyevent(4)
self.driver.implicitly_wait(5)
# toast提示框
ele = WebDriverWait(self.driver, 20, 0.1).until(
EC.presence_of_element_located((By.XPATH, './/*[contains(@text,"再按一次返回键")]')))
print(ele.text)
# 再按一次返回键,退出程序
self.driver.keyevent(4)
"""
KEYCODE_MENU 菜单键82
KEYCODE_BACK 返回键4
KEYCODE_SEARCH 搜索键84
KEYCODE_ENTER 回车键66
KEYCODE_DEL 退格键67
KEYCODE_FORWARD_DEL 删除键112
......
"""
截图
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/22 19:18
import unittest
import time
from appium import webdriver
class AndroidTests(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '10'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['noReset'] = 'True'
desired_caps['appPackage'] = 'cn.xiaochuankeji.tieba'
desired_caps['appActivity'] = '.ui.base.SplashActivity'
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
def tearDown(self):
print("执行结束!")
def test_screen_shot(self):
self.driver.implicitly_wait(60)
# 场景:点击关注按钮,切换至关注页面,截图
ele = self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/title")
ele.click()
time.sleep(2)
self.driver.get_screenshot_as_file(r"D:\Desktop\Testman_Study\图库\screen\test.png")
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(AndroidTests)
unittest.TextTestRunner(verbosity=2).run(suite)
中文输入法
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/22 18:44
import unittest
import time
from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
class AndroidTest(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "10"
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['noReset'] = 'True'
desired_caps['appPackage'] = 'cn.xiaochuankeji.tieba'
desired_caps['appActivity'] = '.ui.base.SplashActivity'
# 输入中文
desired_caps['unicodeKeyboard'] = 'True' # 安装appium自带输入法
desired_caps['resetKeyboard'] = 'True' # 重置键盘,修改默认输入法
self.driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
def tearDown(self):
print("执行完成!")
def test_chinese(self):
time.sleep(8)
# 点击第一条帖子的评论按钮
el = self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/middle_view").click()
time.sleep(5)
# 点击评论输入框
self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/etInput").click()
time.sleep(4)
# 输入评论内容12346
self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/etInput").send_keys('真不错!')
time.sleep(2)
# 点击发送
self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/send").click()
# 通过xpath,text属性定位toast提示框
# toast_loc = ("xpath", './/*[contains(@text,"评论发送成功")]')
# 显式等待
ele = WebDriverWait(self.driver, 20, 0.1).until(
expected_conditions.presence_of_element_located((By.XPATH, './/*[contains(@text,"评论发送成功")]')))
# 输出toast提示框的文本内容
print(ele.text)
time.sleep(2)
self.driver.keyevent(4)
重置App
# -*- coding:utf-8 -*-
# 作者:IT小学生蔡坨坨
# 时间:2020/12/22 19:06
import os
import unittest
from appium import webdriver
PATH = lambda p: os.path.abspath(
os.path.join(os.path.dirname(__file__), p)
)
class AndroidTest(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps["platformName"] = "Android"
desired_caps["platformVersion"] = "10"
desired_caps['deviceName'] = 'Android Emulator'
# 重置app
desired_caps['fullReset'] = "true"
# .apk文件的路径
desired_caps['app'] = r"D:\Desktop\Testman_Study\apk\zuiyou518.apk"
# desired_caps['app'] = PATH("D:\Desktop\Testman_Study\apk\zuiyou518.apk")
desired_caps['appPackage'] = 'cn.xiaochuankeji.tieba'
desired_caps['appActivity'] = '.ui.base.SplashActivity'
self.driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
def tearDown(self):
print("执行完成!")
def test_resetApp(self):
pass
toast
import os
import unittest
import time
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# Returns abs path relative to this file and not cwd
PATH = lambda p: os.path.abspath(
os.path.join(os.path.dirname(__file__), p)
)
class AndroidTests(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '10'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['noReset'] = 'True'
desired_caps['appPackage'] = 'cn.xiaochuankeji.tieba'
desired_caps['appActivity'] = '.ui.base.SplashActivity'
# Appium1.6.3版本后才支持toast,之前封装的是Uiautomator,之后才是Uiautomator2
desired_caps['automationName'] = 'Uiautomator2'
desired_caps['newCommandTimeout'] = 200
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
def tearDown(self):
# self.driver.quit()
print("执行结束!")
def test_toast(self):
"""
toast:
Android中的Toast是一种简易的消息提示框;
告知用户任务状态,操作结果,例如:发送成功,加载中,删除成功;
Toast会在屏幕所有层的最上方;
显示时间有限,1s+左右消失。
场景:评论帖子->点击发送->提示评论发送成功的灰黑框->1-2s后消失
"""
# self.driver.implicitly_wait(160)
time.sleep(8)
# 点击第一条帖子的评论按钮
el = self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/middle_view").click()
time.sleep(5)
# 点击评论输入框
self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/etInput").click()
time.sleep(4)
# 输入评论内容12346
self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/etInput").send_keys('123456')
time.sleep(2)
# 点击发送
self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/send").click()
# 通过xpath,text属性定位toast提示框
# toast_loc = ("xpath", './/*[contains(@text,"评论发送成功")]')
# 显式等待
ele = WebDriverWait(self.driver, 20, 0.1).until(
EC.presence_of_element_located((By.XPATH, './/*[contains(@text,"评论发送成功")]')))
# 输出toast提示框的文本内容
print(ele.text)
time.sleep(2)
self.driver.keyevent(4)
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(AndroidTests)
unittest.TextTestRunner(verbosity=2).run(suite)
常用Appium API的更多相关文章
- 移动端自动化测试(二)之 Appium常用的API(python)函数介绍
上一章节已经介绍了Appium的环境搭建,其实只要掌握了Appium的工作原理,前期的准备工作和安装过程是比较简单的.那么当我们搭建好Appium环境后接下来做些什么呢?通常思路是开始appium的第 ...
- Appium常用的API函数
在学习应用一个框架之前,应该了解一下这个框架的整体结构或是相应的API函数.这篇文章还不错:http://blog.sina.com.cn/s/blog_68f262210102vzf9.html,就 ...
- Appium 常用的API函数
常用的API函数[转] http://blog.sina.com.cn/s/blog_68f262210102vzf9.html 获取信息类API (1)获取默认系统语言对应的Strings.xml文 ...
- 篇4 安卓app自动化测试-Appium API进阶
篇4 安卓app自动化测试-Appium API进阶 --lamecho辣么丑 1.1概要 大家好! 我是lamecho(辣么丑),今天是<安卓app自动化测试& ...
- (转载)中文Appium API 文档
该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/s ...
- appium API接口
appium API接口 标签(空格分隔): appium常用api 1.contexts contexts(self) 返回当前会话的上下文,使用可以识别H5页面的控件: driver.contex ...
- 中文Appium API 文档
该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/s ...
- React常用的API说明
楼主刚开始学习react,感受到了他的博大精深,看到很多莫名的用法,不知云云,找了很多没有找到参考手册,只有在中文社区和react官方看了一些,收集了一些比较常用的API,有补充的可以楼下评论补充.后 ...
- elasticsearch中常用的API
elasticsearch中常用的API分类如下: 文档API: 提供对文档的增删改查操作 搜索API: 提供对文档进行某个字段的查询 索引API: 提供对索引进行操作,查看索引信息等 查看API: ...
随机推荐
- H5 ,Css实现了你的logo
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- P1633 二进制
首先将 \(A,B,C\) 二进制中 \(1\) 的个数和最大长度 \(L\) 算出来. 接着考虑二进制位相加的情况: 低位不进上来. \(X\) 和 \(Y\) 中的两个 \(1\) 合成 \(Z\ ...
- 【P2634】聪聪可可——点分治
(题面来自Luogu) 题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头 ...
- go特性-数组与切片
数组: 复制传递(不要按照c/c++的方式去理解,c/c++中数组是引用传递),定长 切片: 引用传递,底层实现是3个字段 array(数组) + len(长度) +cap(容量) type slic ...
- [BUGCASE]FixedDataTable表格数据渲染错误
一.问题描述 广告配置中绑定第三方规格ID表格数据,有一部分展示错乱,具体如下: 表格组件使用 Facebook 的 (fixed-data-table) 组件 二.原因分析 1.检查props 先查 ...
- uni-app 封装接口request请求
我们知道一个项目中对于前期架构的搭建工作对于后期的制作有多么重要,所以不管做什么项目我们拿到需求后一定要认真的分析一下,要和产品以及后台沟通好,其中尤为重要的一个环节莫过于封装接口请求了.因为前期封装 ...
- iOS UIImageView contentMode使用详解
UIImageView 的contentMode这个属性是用来设置图片的显示方式,如居中.居右,是否缩放等,有以下几个常量可供设定:UIViewContentModeScaleToFill //填满i ...
- MySQL下载及使用
MySQL下载及使用 在下载MySQL的过程当中一般都不会下载最新版本的软件,因为最新版本的MySQL可能会出现各种问题,也不推荐在原来的版本上更新到最新版本,因为这样可能导致原本项目能正常运行,更新 ...
- 从JMM透析volatile与synchronized原理,图文并茂
在面试.并发编程.一些开源框架中总是会遇到 volatile 与 synchronized .synchronized 如何保证并发安全?volatile 语义的内存可见性指的是什么?这其中又跟 JM ...
- 5.3 Spring5源码--Spring AOP使用接口方式实现
Spring 提供了很多的实现AOP的方式:Spring 接口方式,schema配置方式和注解. 本文重点介绍Spring使用接口方式实现AOP. 使用接口方式实现AOP以了解为目的. 更好地理解动态 ...