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

Multiple Screenshots in Appium for Hybrid Apps

我一直在 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);
            }
        }
    }