在Appium中failcase实现

2018-01-25  本文已影响123人  唐T唐X

在用Appium编写自动化case的时候会遇到这种场景:测试跑到某一步,验证页面上的元素应该存在。但是实际结果是页面上找不到这个元素,所以此时这个case应该fail了,后面的步骤不应该被执行。但是这个功能是需要我们自己实现的,Appium本身并不知道什么时候应该停止这个case的运行。

下面就来说说怎么实现上述功能,话不多说,直接上代码:

package modules;

import java.util.List;
import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
import org.openqa.selenium.WebElement;

import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import junit.framework.TestCase;
import modules.AndroidModules;
import testcase_andriod.push.OpenAppTestCase;

public class AndroidModules {

    public static Logger log = Logger.getLogger(OpenAppTestCase.class);

    // 验证Id存在
    private boolean isIdExist(AndroidDriver<WebElement> driver, String id) {
        boolean isFind = false;
        try {
            List<WebElement> cells = driver.findElementsById(id);
            if (!cells.isEmpty()) {
                isFind = true;
            }
        } catch (Exception e) {
            log.info("页面找不到id值 - " + id + ",预期存在");
            isFind = false;
        }
        return isFind;
    }

    // 判断ID应该存在
    public void verifyIdExist(AndroidDriver<WebElement> driver, String id) {
        boolean isFind = isIdExist(driver, id);
        if (!isFind) {
            failCase("页面找不到id - " + id);
        }
    }
    
    // Fail case
    public void failCase(String msg) {
        log.info("ERROR! " + msg);
        TestCase.fail("ERROR! " + msg);
    }
}

应该很清楚了吧!其实用的就是junit中TestCase类的fail方法,只是在实现上做了下封装:

    // Fail case
    public void failCase(String msg) {
        log.info("ERROR! " + msg);
        TestCase.fail("ERROR! " + msg);
    }

封装的好处就是无论在哪里调用这个方法,所有的输出都是包含“ERROR!”字段的,这样为我们日后的结果分析提供了方便,同时省去了重复代码编写。

有个细节还是要说下:

    // 验证Id存在
    private boolean isIdExist(AndroidDriver<WebElement> driver, String id) {
        boolean isFind = false;
        try {
            List<WebElement> cells = driver.findElementsById(id);
            if (!cells.isEmpty()) {
                isFind = true;
            }
        } catch (Exception e) {
            log.info("页面找不到id值 - " + id + ",预期存在");
            isFind = false;
        }
        return isFind;
    }

这里用的appium本身的查找元素的方法是findElementsById,所以用不用try块都无所谓,基本不会出现什么错误。但是如果你用的是findElementById,如果找不到就会直接报异常了,所以一定要加try块才行,除非你很喜欢那些exception信息😄

上一篇 下一篇

猜你喜欢

热点阅读