先来个总结提炼:
while True → 目的是为了无限循环
if、else → 是为了条件判断:
本身if、else两个分支,每个都只会执行一次
走了if分支,else分支就拜拜
走了else分支,if分支就拜拜
结合在一起使用:
走if分支,那就无限循环if下面的语句
走else分支,那就无限循环else下面的语句
满足条件 - 跳出循环 - break
看似几句很简单的话,但是写代码逻辑的时候真的让我头大,现在记录下来,防止以后自己会再次忘记
下面是我在学习appium时敲的代码,场景是删除回收站里的内容,内容不重要,主要是看逻辑!!!!
写法一:
(if条件判断,如果条件不满足,执行正常的删除操作)
while True:
project_rubbish = driver.find_elements_by_xpath(
'//android.widget.RelativeLayout[@resource-id="com.teambition.teambition:id/root_rl"]') #回收站列表
if project_rubbish == []:
print('无项目可删')
break
# 这里不要写else,写了else会报错
time.sleep(1)
driver.find_element_by_xpath(
'//android.widget.RelativeLayout[@resource-id="com.teambition.teambition:id/root_rl"]').click()
# 进入项目中,点击右上角选项
time.sleep(1)
driver.find_element_by_accessibility_id('项目动态').click()
# 点击右上角齿轮
driver.find_element_by_id('com.teambition.teambition:id/img_setting').click()
# 做判断,判断彻底删除项目是否存在在当前界面,不存在就滑动
while True:
elements = driver.find_elements_by_id('com.teambition.teambition:id/delete_layout')
if elements == []:
driver.swipe(600, 1600, 600, 600, 1000)
else:
elements[0].click()
break
# 点击“确定”
driver.find_element_by_id('android:id/button1').click()
driver.quit()
写法二:
while True:
project_rubbish = driver.find_elements_by_xpath(
'//android.widget.RelativeLayout[@resource-id="com.teambition.teambition:id/root_rl"]')
if project_rubbish != []:
time.sleep(1)
driver.find_element_by_xpath(
'//android.widget.RelativeLayout[@resource-id="com.teambition.teambition:id/root_rl"]').click()
# 进入项目中,点击右上角选项
time.sleep(1)
driver.find_element_by_accessibility_id('项目动态').click()
# 点击右上角齿轮
driver.find_element_by_id('com.teambition.teambition:id/img_setting').click()
# 做判断,判断彻底删除项目是否存在在当前界面,不存在就滑动
while True:
elements = driver.find_elements_by_id('com.teambition.teambition:id/delete_layout')
if elements == []:
driver.swipe(600, 1600, 600, 600, 1000)
else:
elements[0].click()
break
# 点击“确定”
driver.find_element_by_id('android:id/button1').click()
else:
print('无项目可删了')
break
driver.quit()
写法三—错误的写法,逻辑不对:
(2021年9月1日15点35分:我自己执行的时候偶尔又不会报错,可以正常跑通,但是还是推荐前两种,这种暂不建议)
(2021年9月1日15点04分:while一直循环else里面的语句,如果回收站全部删除完成,while仍然会执行else里面的语句,这个时候就会报错。因为这里没有进入到if分支,就没有做是否是空列表的判断,所以继续执行else里面找元素定位的语句,接下来找不到就报错了)
while True:
project_rubbish = driver.find_elements_by_xpath(
'//android.widget.RelativeLayout[@resource-id="com.teambition.teambition:id/root_rl"]') #回收站列表
if project_rubbish == []:
print('无项目可删')
break
# ---------------------这里因为没有进入到if分支,就没有做判断--做是否是空列表的判断-----------------------------------------
else:
time.sleep(1)
driver.find_element_by_xpath(
'//android.widget.RelativeLayout[@resource-id="com.teambition.teambition:id/root_rl"]').click()
# 进入项目中,点击右上角选项
time.sleep(1)
driver.find_element_by_accessibility_id('项目动态').click()
# 点击右上角齿轮
driver.find_element_by_id('com.teambition.teambition:id/img_setting').click()
# 做判断,判断彻底删除项目是否存在在当前界面,不存在就滑动
while True:
elements = driver.find_elements_by_id('com.teambition.teambition:id/delete_layout')
if elements == []:
driver.swipe(600, 1600, 600, 600, 1000)
else:
elements[0].click()
break
# 点击“确定”
driver.find_element_by_id('android:id/button1').click()
重要的是逻辑,如果有同样兴趣,我们可以一起交流,笔芯~