🍎以最右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()
⌨️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
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)