背景

判断当前安卓APP是否存在某个元素,如果存在则对第一个元素进行操作,包括点击、获取某个属性的值等操作

代码如下:

 public static boolean findElementById(String title,String id){
        findElement = null;
        takePhoto(title);
        List<WebElement> eles = driver.findElementsById(id);
        allureLog("findElementById->"+title,"根据id->"+id+"->查找ele->元素个数->"+eles.size());
        logger.info(title+"->findElementById->元素个数="+eles.size());
        if(eles.size()==0){
            findElement = null;
            logger.info("没有找到ele,跳过->"+title);
            return false;
        }else{
            findElement = eles.get(0)
            return true;
        }
    }

问题

明明已经获取到了元素,并且元素个数也是正确的,但是在执行具体操作的时候比如findElement.click()的时候,就会报The element does not exist in DOM anymore的错误,大概意思就是没有找到id=xx的元素

排查

findElement = eles.get(0)修改为findElement = driver.findElementById(id)则没有问题,这时候调用getClass().getName(),发现异常:
– eles.get(0)的返回值是WebElement,这个泛型的时候指定的
– driver.findElementById(id) 返回的是AndroidElement

这时候看初始化对象

 public static AndroidDriver driver = null ;
 public static WebElement findElement = null;

driver的类型是AndroidDriver,到这里就清晰了:应该把泛型的类由WebElement修改为AndroidElement,修改后问题解决

发表评论

电子邮件地址不会被公开。 必填项已用*标注