最近做app UI自动化时软件中有很多的弹窗出现,影响下一步操作,导致用例执行失败
主要也是因为公司软件有很多不定时的弹窗出现,所以需要在弹窗出现后将其X掉,进行下一步操作

处理方法:
  • getPageSource方法可以在当前页面可以得到一个文本字符串,也可以理解为当前页面的xml,利用这种xml文本来进行判断,比用appium一一定位的方式要快速和精准的多
   public static void handleHashAlert() {
        String pageSource = Driver.getInstance().getPageSource();
        String iv_close1 = "iv_close";
        

        HashMap<String, By> map = new HashMap<>();
        map.put(iv_close1, By.id(iv_close));
        map.put(cancel1, By.id(cancel));
        map.put(closebtn1, By.id(closebtn));
        map.put(dialogClose1, By.id(dialogclose));
        map.put(imageclose1, By.id(imageclose));
        map.put(naviright1, By.id(naviright));
        map.put(skip1, By.id(skip));
        map.put(refuselove1, By.id(refuselove));
        map.put(nowheat1, By.id(nowheat));
        map.put(downsure1, By.id(downsure));
        map.put(groupclose1, By.id(groupclose));
		
		# 遍历map,判断当前页面是否有弹窗
        map.entrySet().forEach(entry -> {
            if (pageSource.contains(entry.getKey())) {
                // 存在弹窗 直接点击消除
                Driver.getInstance().findElement(entry.getValue()).click();
            }
        });
    }

定位元素时调用 handleHashAlert方法

	public static AndroidElement findLocatorId(String id) {
        try {
            Driver.waitForElementVisible(Driver.getInstance(), By.id(id), 3);
            return Driver.getInstance().findElement(By.id(id));
        } catch (Exception e) {
            handleHashAlert();
            log.info("弹窗处理");
            Driver.waitForElementVisible(Driver.getInstance(), By.id(id), 3);
            return Driver.getInstance().findElement(By.id(id));
        }
    }
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐