测试的apk: 一家民宿
断言使用的模块;unittest单元测试框架
unittest特点在于:
1、框架对测试人员来说比较友好,自带初始化方法,保证了用例运行环境,互不干扰:
setup() ,在每一条用例开始前做准备工作
teardown(): 在每条用例结束后做清除工作
setupClass(): 在全部用例开始前做一次准备工作
tearDownClass(): 在全部用例结束后做一次清除工作
2、可以对测试结果生成测试报告
3、支持参数化(数据驱动:ddt),批量执行自动化用例
正文
1、点击进入想要去的景点,这里获取的是id
2、进入后,获取文本框定位,这里获取的依然是id。因为appium推荐的(Find By)都是唯一的元素值,不需要去验证,当然,如果没有这种唯一的,那你就要考虑哪种更适合了
3、输入文本内容为北京,并点击下拉框中的第一个内容
可以看到,在输入完北京以后,这些下拉内容全部都无法选择,那只能使用tap来点击咯
x = 200
y = 210
4、以我刚才输入内容为条件,来用断言看看是否与北京一致
虽然我们用眼看到的是北京,但既然是自动化,那么也让机器来判断它吧
代码实现:
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
import time
import unittest
caps = {}
caps["platformName"] = "Android"
caps["platformVersion"] = "5.1.1"
caps["deviceName"] = "127.0.0.1:62001"
caps["appPackage"] = "me.onehome.app"
caps["appActivity"] = ".activity.ActivitySplash_"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
driver.implicitly_wait(15)
time.sleep(5)
TouchAction(driver).tap(x=207, y=1425).perform() # 点击立即开启
# 点击想去的目的地:
driver.find_element_by_id('me.onehome.app:id/tv_Destination').click()
#输入内容:
input = driver.find_element_by_id('me.onehome.app:id/editText')
input.send_keys('北京')
# 点击下拉内容的第一个
time.sleep(3) # 因为是tap点击,所以先让下拉内容加载出来再去模拟手势去点击它
TouchAction(driver).tap(x = 200,y = 210).perform()
# 获取主页内容的文本信息,来与我输入的内容做断言,符合既通过,不符合既用例失败
result = driver.find_element_by_id('me.onehome.app:id/tv_Destination').get_attribute('text')
# 判断 是否相等
unittest.TestCase().assertEqual(result,"北京",msg='用例失败')
断言分很多种
assertIn(a,b) : 判断a是否在b里
assertEqual(a,b): 判断a与b是否相等
assertTrue(a) : 判断a的布尔值是否为True,为True既通过,否则失败
assertIs(a,b); 判断a与b两个值的存储地址是否指向了一处
其中,msg参数为断言失败的提示语,当断言失败时,就会提示你输入的这段话
我这里失败了,因为我用的是相等的断言,返回的内容为北京市,我断言的是北京
所以,在这种情况下,一定要符合场景来使用断言。
像上面这种情况,用包含就好了: assertIn()