Appium中用于混合应用程序的多个屏幕截图



我一直在Appium中使用屏幕捕获[public void getScreenshot(){...}]来处理测试失败和启动。我想为我的套件中的每个findElement()调用相同的方法。我试过这样做:

创建自定义驱动程序为:

public class CustomDriver extends AppiumDriver{
        public WebElement scrollToExact(String element) {   
            WebElement x = null;
            return x;
        }
        public WebElement scrollTo(String element){
            WebElement y = null;
            return y;
        }
        @Override
        public List<WebElement> findElements(By by) {
            try {
                getScreenshot();
            }
            catch (IOException iox){
                System.out.println(iox.getMessage());
            }
            return by.findElements(this);
        }
        @Override
        public WebElement findElement(By by) {
            try {
                getScreenshot();
            } 
            catch(IOException iox){
                System.out.println(iox.getMessage());
            }
            return by.findElement(this);
        }
}

使用此驱动程序创建测试套件。

Q1.虽然这对我来说很好,但当我将上下文切换到Webview时,我的驱动程序不会响应在该上下文中查找元素。我在这里跟进的有什么问题吗?[如果需要,将提供详细信息,但自己不确定。]

Q2.我缺少什么更简单的东西来获取套件中每个findElement()调用的屏幕截图吗?

根据我的经验,屏幕截图只在NATIVE_APP上下文中工作,所以如果你在WebView上下文中,你必须切换到本地上下文,然后再切换回来,比如:

    @Override
    public List<WebElement> findElements(By by) {
        String originalContext = getContext();
        if ("NATIVE_APP".equals(originalContext)) {
            originalContext = null; // no need to switch
        } else {
            context("NATIVE_APP");
        }
        try {
            getScreenshot(); // Before screenshot
            return super.findElements(by);
        } finally {                
            if (originalContext!=null) {
                context(originaContext);
            }
        }
    }

最新更新