【问题标题】:Multiple Screenshots in Appium for Hybrid AppsAppium 中用于混合应用程序的多个屏幕截图
【发布时间】:2015-12-08 12:20:29
【问题描述】:

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

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

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

第二季度。有没有什么更简单的方法可以让我为我的套件中的每个findElement() 调用获取屏幕截图

【问题讨论】:

    标签: java overriding screenshot appium


    【解决方案1】:

    根据我的经验,屏幕截图仅适用于 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);
                }
            }
        }
    

    【讨论】:

    • 将 originalContext 赋值为 null 的任何具体原因?
    • @Override public List&lt;WebElement&gt; findElements(By by) { String originalContext = getContext(); if (!originalContext.equals("NATIVE_APP")) { context("NATIVE_APP"); } try { getScreenshot(); // Before screenshot return super.findElements(by); } finally { context(originaContext); } } 对我有用
    • 这是一种表示不需要最终切换回上下文的方式。或者它可能是 if (!"NATIVE_APP".equals(originalContext)) { context("NATIVE_APP"); } 尝试 { getScreenshot(); // 截图前 return super.findElements(by); } 最后 { if (!"NATIVE_APP".equals(originalContext)) { context(originaContext); } } - 编码偏好问题。
    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多