Appium 关于 appium 元素定位的一个问题

zhangyang · 2014年07月04日 · 最后由 zhangyang 回复于 2014年07月04日 · 3699 次阅读

用 python 编写自动化测试脚本,我像根据某界面元素是否存在(假设为 button1)来判断执行某流程,如:

button1 = self.driver.find_element_by_name("登录")

if not button1 is None:
# 执行用户未登录时的流程

# 执行用户已登录时的流程

但是这样写代码,运行的时候第一句会报 “an element could not be located by give para.......” 元素定位不到的错误
这个是正常报错,因为当用户已经登录的时候,界面上不会有 “登录” 按钮

我的问题是:有没有什么好方法能实现我的这个目的的?

共收到 12 条回复 时间 点赞

用 try catch 来规避。

#1 楼 @lihuazhang ok 我试试 谢了

#2 楼 @hobbs 或者先判断有没有这个 element 啊

find_elements_by_name 也可以,会返回空的数组,判断个数就知道了

这个完全是逻辑问题,if not button1 is None: 进入到这句的时候,button1 必须由你的第一句返回,用 catch 捕获这个异常~

#3 楼 @lihuazhang 我试了一下 用 try except else 语句可以实现我的目的 python 中是 try except 搭配用 你说的 try catch 应该是 java 和其他语言的用法

#5 楼 @qddegtya 对啊 关键是第一句执行的时候就错报错了,所以第二句就无从执行起。 我最终的解决办法是这样的 代码如下,供大家参考

try
     button1 = self.driver.find_element_by_name("登录")
except:
     print "用户已登录,执行用户已登录时的测试流程"
else
      print 用户未登录执行用户未登录时的测试流程
      ###aaa这里是用户未登录时的流程



###bbb这里是用户已登录的流程

这样写可以实现我的目的,因为如果登录按钮不存在,捕获异常执行 except 中的内容,然后后执行 bbb;登录按钮存在,没有异常,执行 else 中的内容 aaa,然后执行 bbb。这样就没问题了

#6 楼 @hobbs 。。。我是泛指。。

#8 楼 @lihuazhang 恩,不过还是非常感谢,你给提供了思路

#7 楼 @hobbs 请捕获具体的异常~

#10 楼 @qddegtya 我只是为了实现这么一个逻辑:当页面找不到 “登录” 按钮时,判断为已登录,当找得到该按钮时,判断为未登录。 当 “登录” 按钮找不到时,也就是 try 块里边的语句执行出错时,会出异常,具体异常,我想应该是 an element could not be located balabalabala...

加个头像吧。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册