python-UI自动化
在利用 uiautomator2 进行元素定位,生成UI的测试代码时,对于一些特殊场景有时候不好进行判断和进行用例设计。
场景1. 判断元素是否存在,来进行不同的操作。
s = self.d(resourceId="com..plus:id/iot_txt_home_name", text=u"立即登录", className="android.widget.TextView")
if len(s) == 0:
print '元素未找到,执行退出操作'
time.sleep(1)
else:
print "-----开始执行登录操作-----"
self.d(resourceId="com..plus:id/iot_txt_home_name").click()
根据这个元素的定位,来利用len方法得到它是否存在。if else 就可以解决。针对不同的元素存在情况来解决执行那种步骤。
场景2.存在多种场景,通过元素的存在性来进行不同处理。
def update_Invoice(self, types):
"""
根据发票类型来进行判断
"""
self.d(resourceId="com..plus:id/iv_edit_invoice", className="android.widget.ImageView").click()
for i in range(0, 10):
print i
time.sleep(2)
s = self.d(text=types)
if len(s) != 0:
if types == '税号': # 判断税号就是电子发票
time.sleep(1)
self.d(resourceId="com..plus:id/et_tax_no").set_text(
"421125888882" + str(random.randint(2222, 3333)))
time.sleep(1)
self.d.press('back')
self.d(text=u'完成').click()
break
elif types == '手机号': # 判断手机号,就是个人发票
self.d(resourceId="com..plus:id/et_phone_no").set_text(
"1389983" + str(random.randint(2222, 3333)))
time.sleep(1)
self.d(text=u'完成').click()
break
# 判断开户银行就是确认为企业增值税
elif types == '开户银行':
self.d(resourceId="com..plus:id/et_address").set_text("福田区")
self.d.press('back')
self.d(text=u'完成').click()
break
else:
print '找不到手机号元素,继续循环'
time.sleep(1)
self.d.press('back')
time.sleep(1)
self.d(resourceId="com..plus:id/iv_edit_invoice", className="android.widget.ImageView",
instance=i + 1).click()
这是一个编辑发票的场景,因为每次点开编辑按钮不知道点开的东西,是属于哪种发票类型。所以通过循环的方式,调这个函数时,就给定要编辑哪种类型的发票,从而执行哪种循环

每次通过点击这个编辑按钮,进入发票的编辑页面,那么可以通过这个页面存在的特殊字段来决定他是属于什么类型的发票。从而解决我们的问题。
从以上循环可以得出三个不同的场景,
个人发票是 有手机号这个字段的,那么types就是==‘手机号’
企业发票 是通过税号这个字段 那么types==‘税号’
增值税是通过开户银行这个字段 那么types==‘开户银行’
一开始进入发票的这个页面,需要进行一次点击的才能进行下面的for循环,而找不到我们需要的types就进入到了 else里面 ,所以需要进行 back、然后进行点击
但是这个写法存在一个疑问,就是10次循环都跑完了,页面没有进行下拉(往上滑动) 还是找不到我们需要的元素咋办。没有做异常处理。
场景3. 怎么对app进行截图
因为当对app进行UI 页面检查时,我们是需要对它进行截图,因为只能通过元素的存在性来判断页面是否正常,有点片面,所以需要进行截图保存下来,每次用例跑完之后,人工看一下页面截图。

里面有两个参数,filename是要自己填的,中文也可以,filepath给了一个默认路径,需要自己加,我的路径是当前目录上一级目录的image/Member 这样
特殊注意,当采用python2进行写时,需要对中文名字进行decode

场景4:
滑动,屏幕往上滑动
self.d(scrollable=True).scroll(steps=5)
滑动,屏幕向下滑动
self.d(scrollable=False).scroll.to(text='精装保修') # 滑动到指定位置
简言之就是根据 scrollable等于true 或者false来判断上下
场景5:针对对多个页面进行截图
利用d(text=i).click()的方式


浙公网安备 33010602011771号