一、在脚本内启动其他app
1.1.应用场景
如果一个应用需要跳转到另外一个应用,就可以使用这个api进行应用的跳转,就像我们通过外卖应用下订单之后会跳转到支付应用一样。
1.2.方法
1).driver.start_activity(appPackage,appActivity)
2).appPackage:打开的程序的包名
3).appActivity:要打开的程序的界面名
1.3.代码
import unittest
from appium import webdriver
from selenium.webdriver.common.by import By
# 打开相册
capabilities = {}
capabilities['platformName'] = 'Android'
capabilities['automationName'] = 'uiautomator2'
capabilities['deviceName'] = 'Android'
capabilities['appPackage'] = 'com.android.gallery3d'
capabilities['appActivity'] = '.app.GalleryActivity'
capabilities['language'] = 'en'
capabilities['locale'] = 'US'
appium_server_url = 'http://localhost:4723'
class TestAppium(unittest.TestCase):
def setUp(self) -> None:
# 获取driver
self.driver = webdriver.Remote(appium_server_url,capabilities)
self.driver.implicitly_wait(30)
def tearDown(self) -> None:
if self.driver:
# 退出程序
self.driver.quit()
def test_find_battery(self) -> None:
# 点击相册app
el = self.driver.find_element(By.XPATH, '//*[@text="Gallery"]')
el.click()
if __name__ == '__main__':
unittest.main()
二、获取包名和界面名
2.1.应用场景
当我们从一个应用跳转到另外一个应用的时候,想输出其包名、界面名或者想在报告中展现对应信息,我们就可以调用这个属性来进行获取
2.2.方法
1).获取包名--->driver.current_package
2).获取界面名--->driver.current_activity
2.3.代码
import unittest
from appium import webdriver
from selenium.webdriver.common.by import By
# 打开相册
capabilities = {}
capabilities['platformName'] = 'Android'
capabilities['automationName'] = 'uiautomator2'
capabilities['deviceName'] = 'Android'
capabilities['appPackage'] = 'com.android.gallery3d'
capabilities['appActivity'] = '.app.GalleryActivity'
capabilities['language'] = 'en'
capabilities['locale'] = 'US'
appium_server_url = 'http://localhost:4723'
class TestAppium(unittest.TestCase):
def setUp(self) -> None:
# 获取driver
self.driver = webdriver.Remote(appium_server_url,capabilities)
self.driver.implicitly_wait(30)
def tearDown(self) -> None:
if self.driver:
# 退出程序
self.driver.quit()
def test_find_battery(self) -> None:
# 输出当前程序的包名和界面名
# el = self.driver.find_element(By.XPATH, '//*[@text="Gallery"]')
print(self.driver.current_package)
print(self.driver.current_activity)
# el.click()
if __name__ == '__main__':
unittest.main()
三、关闭app和驱动对象
3.1.应用场景
有的时候我们需要关闭某个应用程序后,再打开新的应用。那么如何关闭应用程序呢?
3.2.方法
1).关闭当前操作的app,不会关闭驱动对象----driver.terminate_app()
2).关闭驱动对象,同时关闭所有关联的app---driver.quit()
3.3.代码
import unittest
from time import sleep
from appium import webdriver
from selenium.webdriver.common.by import By
# 打开相册
capabilities = {}
capabilities['platformName'] = 'Android'
capabilities['automationName'] = 'uiautomator2'
capabilities['deviceName'] = 'emulator-5554'
capabilities['platformVersion'] = '9.0'
capabilities['appPackage'] = 'com.android.settings'
capabilities['appActivity'] = '.Settings'
capabilities['language'] = 'en'
capabilities['locale'] = 'US'
capabilities['autoGrantPermissions'] = True
appium_server_url = 'http://localhost:4723'
class TestAppium(unittest.TestCase):
def setUp(self) -> None:
# 获取driver
self.driver = webdriver.Remote(appium_server_url,capabilities)
# self.driver.implicitly_wait(30)
def tearDown(self) -> None:
if self.driver:
# 关闭驱动
sleep(2)
self.driver.quit()
def test_find_battery(self) -> None:
# 点击app,并等待两秒钟关闭app
el = self.driver.find_element(By.XPATH, '//*[@text="Battery"]')
el.click()
sleep(2)
self.driver.terminate_app('com.android.settings')
if __name__ == '__main__':
unittest.main()
四、安装和卸载app
4.1.应用场景
一些应用市场的软件可能会有一个按钮,如果某一个程序已经安装则卸载,如果没有安装则安装
4.2.方法
1).安装app:driver.install_app(app_path)
2).卸载app:driver.remove_app(app_id)
3).判断app是否已经安装:driver.is_app_installed(app_id)
4.3.代码
import unittest
from time import sleep
from appium import webdriver
from selenium.webdriver.common.by import By
# 打开相册
capabilities = {}
capabilities['platformName'] = 'Android'
capabilities['automationName'] = 'uiautomator2'
capabilities['deviceName'] = 'emulator-5554'
capabilities['platformVersion'] = '9.0'
capabilities['appPackage'] = 'com.android.browser'
capabilities['appActivity'] = '.BrowserActivity'
capabilities['language'] = 'en'
capabilities['locale'] = 'US'
capabilities['autoGrantPermissions'] = True
appium_server_url = 'http://localhost:4723'
class TestAppium(unittest.TestCase):
def setUp(self) -> None:
# 获取driver
self.driver = webdriver.Remote(appium_server_url,capabilities)
# self.driver.implicitly_wait(30)
def tearDown(self) -> None:
if self.driver:
# 关闭驱动
self.driver.quit()
def test_find_battery(self) -> None:
# 判断浏览器是否已经安装
if self.driver.is_app_installed("com.android.browser"):
# 卸载app
print("true")
# self.driver.remove_app("com.android.browser")
else:
# 安装app
# self.driver.install_app()
print("false")
if __name__ == '__main__':
unittest.main()
五、将应用置于后台
5.1.应用场景
银行类app会在进入后台一定时间后,如果再回到前台也页面会重新输入密码,如果需要自动化测试这种功能,可以使用这个api进行测试
5.2.方法
1).app放置在后台一定时间后再返回前台,模拟热启动
2).driver.background_app(seconds)
5.3.注意
热启动:表示进入后台回到前台。关机再开这种切断电源的行为可以叫做“冷启动”
5.4.代码
import unittest
from time import sleep
from appium import webdriver
from selenium.webdriver.common.by import By
# 打开相册
capabilities = {}
capabilities['platformName'] = 'Android'
capabilities['automationName'] = 'uiautomator2'
capabilities['deviceName'] = 'emulator-5554'
capabilities['platformVersion'] = '9.0'
capabilities['appPackage'] = 'com.android.settings'
capabilities['appActivity'] = '.Settings'
capabilities['language'] = 'en'
capabilities['locale'] = 'US'
capabilities['autoGrantPermissions'] = True
appium_server_url = 'http://localhost:4723'
class TestAppium(unittest.TestCase):
def setUp(self) -> None:
# 获取driver
self.driver = webdriver.Remote(appium_server_url,capabilities)
# self.driver.implicitly_wait(30)
def tearDown(self) -> None:
if self.driver:
# 关闭驱动
sleep(2)
self.driver.quit()
def test_find_battery(self) -> None:
# 点击app,并进入后台五秒钟,然后再关闭app
el = self.driver.find_element(By.XPATH, '//*[@text="Battery"]')
el.click()
sleep(2)
self.driver.background_app(5)
sleep(2)
self.driver.terminate_app('com.android.settings')
if __name__ == '__main__':
unittest.main()