1.unittest测试框架
#导包
import unittest
from appium import webdriver
from time import sleep
class Test(unittest.TestCase):
def setUp(self) -> None:
device = {}
device['deviceName']='127.0.0.1:62026'
device['platformName']='Android'
device['platformVersion']='7.1.2'
device['appPackage']=''
device['appActivity']=''
# 指定每次运行测试前不重新安装 App
device['noReset'] = True
# 输入中文字符
device['unicodeKeyboard'] = True
device['resetKeyboard'] = True
global driver
driver = webdriver.Remote('http://localhost:4723/wd/hub',device)
def tearDown(self) -> None:
driver.quit()
sleep(3)
def test01(self):
pass
if __name__ == '__main__':
#unittest.main()
suit=unittest.TestSuite()
case_list=[]
for i in case_list:
suit.addTest(Test(i))
unittest.TextTestRunner(verbosity=2).run(suit)
2.unittest断言
2.1 assert 断言
断言 str1 是否在 str2 中
assert str1 in str2
self.assertIn(str1,str2)
断言 str1 和 str2 是否相等
assert 表达式 1==表达式 2
self.assertEqual(实际, 预期)
2.2 WebApp 中的断言
获得网页返回结果/所有页面元素
driver.page_source
2.3 unittest断言使用
# 导包
import unittest
from appium import webdriver
from time import sleep
driver=null
class Test(unittest.TestCase):
def setUp(self) -> None:
device = {}
device['deviceName'] = '127.0.0.1:62026'
device['platformName'] = 'Android'
device['platformVersion'] = '7.1.2'
device['appPackage'] = 'com.android.browser'
device['appActivity'] = '.BrowserActivity'
# 指定每次运行测试前不重新安装 App
device['noReset'] = True
# 输入中文字符
device['unicodeKeyboard'] = True
device['resetKeyboard'] = True
global driver
driver = webdriver.Remote('http://localhost:4723/wd/hub', device)
def tearDown(self) -> None:
global driver
sleep(5)
driver.quit()
def test01(self):
global driver
driver.find_element_by_id('index-kw').send_keys('app测试')
# 回车键
driver.press_keycode(66)
# 获得网页返回结果 / 所有页面元素
str1 = driver.page_source
self.assertIn('resource-id="page"', str1)
if __name__ == '__main__':
# unittest.main()
suit = unittest.TestSuite()
case_list = ['test01']
for i in case_list:
suit.addTest(Test(i))
unittest.TextTestRunner(verbosity=2).run(suit)
2.4使用xpath定位
driver.find_element_by_xpath('//*[contains(@text,"包含的字符串")]')
from appium import webdriver
from time import sleep
device = {}
device['deviceName'] = '127.0.0.1:62026'
device['platformName'] = 'Android'
device['platformVersion'] = '7.1.2'
#打开微信
device['appPackage'] = 'com.tencent.mm'
device['appActivity'] = 'com.tencent.mm.ui.LauncherUI'
# 指定每次运行测试前不重新安装 App
device['noReset'] = True
# 输入中文字符
device['unicodeKeyboard'] = True
device['resetKeyboard'] = True
driver = webdriver.Remote('http://localhost:4723/wd/hub', device)
#使用Xpath定位登录按键
sleep(3)
driver.find_element_by_xpath('//*[contains(@text,"登录")]').click()
2.5 切换到对话框(切换窗口)
等最大超时时间,如果没有出现新activity,则继续往下执行,如果出现了新activity,则不用等了,直接往下执行
driver.wait_activity("新activity 名称",超时时间)
如,微信登录时,会弹出一个窗口欧,要求获取权限。我们需要使用,
driver.wait_activity("窗口的activity 名称",超时时间)
,切换到窗口
from appium import webdriver
from time import sleep
device = {}
device['deviceName'] = '192.168.190.102:5555'
device['platformName'] = 'Android'
device['platformVersion'] = '8.1.0'
# 打开微信
device['appPackage'] = 'com.tencent.mm'
device['appActivity'] = 'com.tencent.mm.ui.LauncherUI'
# 指定每次运行测试前不重新安装 App
device['noReset'] = True
# 输入中文字符
device['unicodeKeyboard'] = True
device['resetKeyboard'] = True
driver = webdriver.Remote('http://localhost:4723/wd/hub', device)
# 切换到活动窗口
driver.wait_activity("com.android.packageinstaller.permission.ui.GrantPermissionsActivity", 5)
2.6操作弹窗
导包
from selenium.webdriver.support.ui import WebDriverWait
等待模块
from selenium.webdriver.support import expected_conditions
判断模块
首选查找Xpath路径
注意"xpath"中的“x”小写
toast=('xpath','//*[contains(@text,"要找的字符串")]')
查询Xpath中包含要找的字符串的的元素,最多查询10s,每0.1s查询一次,
t=WebDriverWait(driver,10,0.1).until(expected_conditions.presence_of_element_located(toast))
操作找出来的元素
t.click()
from appium import webdriver
from time import sleep
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
device = {}
device['deviceName'] = '192.168.190.102:5555'
device['platformName'] = 'Android'
device['platformVersion'] = '8.1.0'
# 打开微信
device['appPackage'] = 'com.tencent.mm'
device['appActivity'] = 'com.tencent.mm.ui.LauncherUI'
# 指定每次运行测试前不重新安装 App
device['noReset'] = True
# 输入中文字符
device['unicodeKeyboard'] = True
device['resetKeyboard'] = True
driver = webdriver.Remote('http://localhost:4723/wd/hub', device)
# 切换到活动窗口
iftrue = driver.wait_activity(".permission.ui.GrantPermissionsActivity", 5)
print(iftrue)
# 根据Xpath包含的部分文本,获取想要操作元素的Xpath
toast=('xpath','//*[contains(@text,"ALLOW")]')
# 查询Xpath中包含要找的字符串的的元素,最多查询10s,每0.1s查询一次,
t = WebDriverWait(driver, 10, 0.1).until(expected_conditions.presence_of_element_located(toast))
t.click()
2.7 滑屏
获得屏幕大小/屏幕分辨率
width=driver.get_window_size()['width']
height=driver.get_window_size()['height']
向上划屏,每次间隔 1000ms
for i in range(1,7): #滑屏次数
driver.swipe(width/2,height*3/4,width/2,height/4,1000) #每次从width/2,height*3/4开始,width/2,height/4结束
2.8 代码开启关闭app
关闭自动启动
device['autoLaunch'] = False
开启app
driver.launch_app()
关闭app
driver.close_app()
清除设置以后启动或重启 App
driver.reset()