zoukankan      html  css  js  c++  java
  • appium 3-31603调试分析方法

    1.Appium Log

    清晰记录了所有的请求和结果

     @Test
       public void testDebug() throws InterruptedException,IOException{
            MobileElement tiaoguo = (MobileElement) driver.findElementByXPath("//*[@text='跳过']");
            FileUtils.copyFile(new File("tiaoguo.png"),tiaoguo.getScreenshotAs(OutputType.FILE));
            Thread.sleep(15000);
        }
    

    IDE执行结果:提示方法没有实现

    appium日志

    通过log中可以获取更多的信息,如
    在screenshot方法执行时,有URL链接,加上IP和port,访问就可以获取到更多信息。
    127.0.0.1:4723/wd/hub/session/92fe82c7-02ac-4fca-a8da-eca08027f985/element/1/screenshot
    可以看到/appium/node_modules/appium-base-driver/lib/basedriver/driver.js:249:13中方法未实现

    {"value":{"error":"unknown method","message":"Method has not yet been implemented","stacktrace":"NotYetImplementedError: Method has not yet been implemented
        at AndroidDriver.executeCommand$ (/usr/local/lib/node_modules/appium/node_modules/appium-base-driver/lib/basedriver/driver.js:249:13)
        at tryCatch (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:67:40)
        at GeneratorFunctionPrototype.invoke [as _invoke] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:315:22)
        at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:100:21)
        at invoke (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:136:37)
        at enqueueResult (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:185:17)
        at Promise (<anonymous>)
        at F (/usr/local/lib/node_modules/appium/node_modules/core-js/library/modules/$.export.js:30:36)
        at AsyncIterator.enqueue (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:184:12)
        at AsyncIterator.prototype.(anonymous function) [as next] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:100:21)
        at Object.runtime.async (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:209:12)
        at AndroidDriver.executeCommand (/usr/local/lib/node_modules/appium/node_modules/appium-base-driver/build/lib/basedriver/driver.js:271:34)
        at AppiumDriver.executeCommand$ (/usr/local/lib/node_modules/appium/lib/appium.js:377:50)
        at tryCatch (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:67:40)
        at GeneratorFunctionPrototype.invoke [as _invoke] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:315:22)
        at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:100:21)
        at GeneratorFunctionPrototype.invoke (/usr/local/lib/node_modules/appium/node_modules/babel-runtime/regenerator/runtime.js:136:37)
        at <anonymous>
        at process._tickCallback (internal/process/next_tick.js:169:7)"}}
    
    cat -n /usr/local/lib/node_modules/appium/node_modules/appium-base-driver/lib/basedriver/driver.js
    

    2.getPageSource

    界面的完整dom结构.xml文件
    封装locate方法,加入异常处理,将获取的节点信息在编辑器中打开,检索控件。

        public WebElement locate(String locate){
            try {
                if (locate.matches("\/\/.*")) {
                    return driver.findElementByXPath(locate);
                } else {
                    return driver.findElementById(locate);
                }
            }catch (org.openqa.selenium.NoSuchElementException EX){
                System.out.println(locate);
                System.out.println(driver.getPageSource());
                return null;//没有返回值,代码会报错
            }
        }
        @Test
        public void TestDriver() throws InterruptedException{
            Thread.sleep(5000);
            //driver.findElementByXPath("//*[@text="允许"]").click();
            locate("//*[@text="允许"]").click();
            Thread.sleep(2000);
        }
    

    因为locate中返回的null,click找不到会因找不到控件报ava.lang.NullPointerException错误

    3.脚本内调试

    利用xpath获取所有匹配的元素 driver.findElementByXpath("//*")

        public WebElement locate(String locate) throws InterruptedException{
            try {
                if (locate.matches("\/\/.*")) {
                    return driver.findElementByXPath(locate);
                } else {
                    return driver.findElementById(locate);
                }
            }catch (org.openqa.selenium.NoSuchElementException EX){
                List<AndroidElement> lists = driver.findElementsByXPath("//*");
                for(AndroidElement e:lists){
                    System.out.print("tag: "+e.getTagName()+"	");
                    System.out.print("text: "+e.getText()+"	");
                    System.out.println("id: "+e.getAttribute("resourceId"));
                    //System.out.println(e.getAttribute("contentDesc"));该属性有误,content-desc也不可用
                    Thread.sleep(500);
                }
                return null;
            }
        }
    

    FAQ

    1.tagName打印null

       @Test
        public void TestDriver() throws InterruptedException{
            Thread.sleep(5000);
            List<AndroidElement> lists66 = driver.findElementsByXPath("//*");
            for(AndroidElement e66:lists66){
                System.out.print("tag: "+e66.getTagName()+"	");
                System.out.print("text: "+e66.getText()+"	");
                System.out.println("id: "+e66.getAttribute("resourceId"));
                Thread.sleep(500);
            }
            Thread.sleep(20000);
        }
    
  • 相关阅读:
    LOJ 6089 小Y的背包计数问题 —— 前缀和优化DP
    洛谷 P1969 积木大赛 —— 水题
    洛谷 P1965 转圈游戏 —— 快速幂
    洛谷 P1970 花匠 —— DP
    洛谷 P1966 火柴排队 —— 思路
    51Nod 1450 闯关游戏 —— 期望DP
    洛谷 P2312 & bzoj 3751 解方程 —— 取模
    洛谷 P1351 联合权值 —— 树形DP
    NOIP2007 树网的核
    平面最近点对(加强版)
  • 原文地址:https://www.cnblogs.com/csj2018/p/9747493.html
Copyright © 2011-2022 走看看