Appium [场景思路指导] app 登入后会有 a、b 两个弹窗 但是根据网络的相应速度 a 、b 两个弹窗的先后次序会变化

MBF · 2017年06月30日 · 最后由 陈恒捷 回复于 2017年07月03日 · 1104 次阅读

有这么一个场景 app 登入后会有 a、b 两个弹窗 但是根据网络的相应速度 a 、b 两个弹窗的先后次序会变化
就是说有时候登入后会是先 a 再 b,有时候又会先 b 再 a
如何用 appium 判断 a、b 弹出顺序并进行相应的操作,试过简单的 if 语句判断 ,但是条件语句会去进行定位操作,当无法定位的时候 app 自己就跳出了
判断语句类似这样

boolean a =driver.findElementById("com.lang.:id/id_update_msg").isEnabled();
 if  (a==true)
 {
     driver.findElementByName("忽略").click();
     driver.navigate().back();
 }
 else
 //if  (a==false)
 {
     driver.navigate().back();
 }

共收到 6 条回复 时间 点赞

app 登入后会有 a、b 两个弹窗...当无法定位的时候 app 自己就跳出了

这些描述很容易误解,给出两种情况下的控件树和错误日志才能更具体的分析
猜一下的话driver.findElementById()找不到时会抛异常,需要用 try...catch 控制( 4 楼的方法更好)

但是根据网络的相应速度 a 、b 两个弹窗的先后次序会变化

想不出什么样的 App 才需要这样做,问题的确在这吗?

MBF #3 · 2017年06月30日 Author
黑水 回复

恩就是有时候 a 先弹出了 我 if 语句判断 a 中的一个元素 enable 属性,如果为 true 那说明 a 的确先弹出了 并且也能走通
但是如果 a 没有先弹出 那 if 语句判断为 false 但是 appium 报 no element found 就退出 app 了
"但是根据网络的相应速度 a 、b 两个弹窗的先后次序会变化" 我们自己的 app 就是这样的机制

笨方法:
try
{
关闭 a

findElementsById ,判断返回的数组长度是不是 0 就知道元素是否存在了。

用 try..catch 这种写法并不好,相当于拿 try catch 当 if 用了。

MBF #5 · 2017年07月03日 Author
陈恒捷 回复
try {  
    boolean a =driver.findElementById("com.lang.:id/id_update_msg").isEnabled();
    if  (a==true)
    {
        driver.findElementByName("忽略").click();
        driver.navigate().back();
    }
}
catch (Exception e)
{
    //else
    //if  (a==false)
    {
        driver.navigate().back();
    }
}

}
我现在将代码中加了 try。。catch,似乎是可以了
请问利用 findElement 判断返回的数组长度是否为 0 如何写呢

MBF 回复

你查下官方的 api 文档看下?官方文档里写得比较全。

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