之前分享过一期unittest单元测试框架下面的断言心得,今天再做些补充;
一)assertIn()
assertIn(member, container, msg=None)
判断是字符串是否包含:member in container
例:
assertIn(“2” in “23”) 成功
assertIn(“1” in “23”) 失败
app有个情景是:在某搜索输入框,输入内容后,直接会显示出来搜索结果,我的思路是在结果里面去寻找是否有搜索内容
self.xin_find_element(By.ID, self.sousuo_id).send_keys('0')
# 断言 显示的用户的text属性值 是含有0的
self.assertIn('0', self.xin_find_element(By.ID, 'id/name').get_attribute('text'))
print('断言1 通过')
二)assertIsNotNone()
assertIsNotNone(obj, msg=None)
判断是否 不为None:obj is not None
assertIsNone:不存在,则pass
assertIsNone(obj,msg) 是为了 检查某个元素是否存在
app有个情景,在某个界面做了修改,点击完成,返回前面的页面,某些选项的text就有了属性值;我的思路是在设置后返回的页面,对于那个属性值做判断是否为空(最初若是没有值,可以增加1个断言);
# 断言 未设置开始时间 这个属性的text为空
self.assertIsNone(self.xin_find_element(By.ID, 'id/action_begin_time').get_attribute('text'), '不是空')
# 断言 修改了开始时间 这个属性的text不为空
self.assertIsNotNone(self.xin_find_element(By.ID, 'id/action_begin_time').get_attribute('text'))
print('断言1 通过')
三)分享到微信、朋友圈-切换app的断言分享
都知道微信的包名是’com./去掉/tencent.mm’,获取当前app的包名这个操作driver.current_package
# 点击分享
self.xin_find_element(By.ID, self.shezhi_fenxiang_id).click()
ABCd = self.driver.current_activity
ABCD = self.driver.current_package
print('当前activity是: ', ABCd, ',当前package是: ', ABCD)
# 点击朋友圈(分享到微信)
self.xin_find_element(By.ID, self.shezhi_fenxiang_peng_id).click()
time.sleep(5) # 保证当前已经是微信app
abcd = self.driver.current_activity
abcD = self.driver.current_package
print('强制等待5秒后, 当前activity是: ', abcd, ',当前package是: ', abcD)
self.assertNotEqual(ABCD, abcD)
print('断言1 通过')
self.assertNotEqual(ABCd, abcd)
print('断言2 通过')
self.assertEqual(abcD, 'com.tencent.mm')
print('断言3 通过')
其实我这样写有些啰嗦,见谅;我也是摸索着才知道 原来有获取当前app的包名 driver.current_package;
这儿还有些小问题:分享到微博(没实践过),若是手机没有装微博app,会打开网页版的微博,那该如何做断言呢?若是装了app,又该如何作断言呢?
四)朋友圈评论-断言分享
len() 方法返回对象(字符、列表、元组等)长度或项目个数。
self.xin_find_element(By.ID, self.pengyouquan_pinglun_id).click()
# 打印 当前评论的条数
print('未评论时:', len(self.driver.find_elements(By.ID, 'id/tv')))
abcd = len(self.driver.find_elements(By.ID, 'id/tv'))
# 输入新的评论、发送
self.xin_find_element(By.ID, self.pengyouquan_pinglun_shuru_id).send_keys('1230123')
self.xin_find_element(By.ID, self.pengyouquan_pinglun_fasong_id).click()
# 打印当前评论的条数
print('评论过', len(self.driver.find_elements(By.ID, 'id/tv')))
abcd2 = len(self.driver.find_elements(By.ID, 'id/tv'))
print(type(abcd2), type(abcd))
print('len() 方法返回的是整数int类型 ')
self.assertTrue(int(abcd) + 1 == int(abcd2), '不可能错的')
print('断言1 通过')
self.assertTrue(abcd + 1 == abcd2)
print('断言2 通过')
这个例子分享出来,是因为之前犯过错:字符串和数字直接拼接,在Python之中是会报错的。所以特地做了int()转换,但是没想到 len()方法本身返回得就是int类型;
我理解中:断言,那就是要做个预期结果和实际结果的对比,方能知道你的操作是否成功;但又有个新问题,地图类的用例该如何做断言呢?好像 放大和缩小 可以断言比例尺(若没有比例尺呢?),待我想想再做分享。
交流技术 欢迎+QQ 153132336 zy