• appium_android-常见的问题


    po模型的原则:
        用公共方法代表UI所提供的功能
        方法应该返回其他的PageObject或者返回用于断言的数据
        同样的行为不同的结果可以建模为不同的方法 不要在方法内加断言 字段意义
        不要暴露页面内部的元素给外部
        不需要建模UI内的所有元素
    
    模拟器的选择:
        bluestacks 类似网易mumu,中文名蓝叠
        网易mumu 默认支持arm指令,不过版本只有6.0
        genymotion 默认只支持x86 需要插件才可以支持arm指令
    
    列出所以的模拟器:$(which emulator) -list-avds
    
    启动某个模拟器:$(which emulator) @Pixel_2_API_27
    
    mumu模拟器的常见设置:
        自定义显示 宽720 -高1080--分辨率
        开发者选项-》输入-》显示坐标与点击位置
    webview的调试:
        模拟器默认开启webview的debug开关。网易mumu模拟器除外
    
    chromedriver相关的配置:
        chromedriverUseSystemExecutable=true 默认使用/usr/local/lib/node_modules/appium/node_modules/_appium-chromedriver@4.14.0@appium-chromedriver/chromedriver/mac/chromedriver
        chromedriverExecutableDir指向chromedriver的存放目录,目前不生效
        chromedriverExecutable执行chromedriver的绝对路径
    
    自动化注意事项:
        合理的使用显式等待
        accessibility xpath定位
    
    Webview识别原理:
        appium会启动chromedriver /Users/seveniruby/projects/chromedriver/2.20/chromedriver --url-base=wd/hub --port=8000 --adb-port=5037 --verbose
        app或者浏览器,底层使用的是android的webview组件,webview组件有一个debug特性,可以在启动的时候,写入一个domain socket记录, webview_devtools_remote_3548
        adb -P 5037 -s emulator-5554 shell cat /proc/net/unix 找到对应的webview调试入口
        adb forward tcp:$port localabstract:webview_devtools_remote_$pid
        curl http://localhost:7770/json/version
        curl http://localhost:7770/json
    
    
        自动寻找webview并分析
            list_webview ()
            {
            port=$1;
            adb shell cat /proc/net/unix | grep -a webview | awk -F_ '{print $NF}' | tr -d '
    ' | while read pid; do
                port=$((port+=1));
                adb forward tcp:$port localabstract:webview_devtools_remote_$pid;
                curl http://localhost:$port/json/version;
                curl http://localhost:$port/json;
            done
        }
        list_webview 7770
    
    真机为了提高性能,默认不开启webview的debug属性,需要研发在webview的组件上调用debug开关 
    
    uiautomator可以识别webview组件:
        本来是不可识别的
        从android的高版本6.0之后uiautomator已经可以识别webview了,他会把webview转化为原生控件来表示
        44813内核不支持调试
        appium无法识别小程序内的控件,但是uiautomatorviewer却可以
    
    测试策略:
        使用原生定位方式,通用性比较好
        把内嵌的网页使用手机浏览器代替测试
        如果还搞不定,模拟器上进行测试
    
    三端的脚本执行环境以及用于渲染非原生组件的环境是各不相同的:
    
    在 iOS 上,小程序逻辑层的 javascript 代码运行在 JavaScriptCore 中,视图层是由 WKWebView 来渲染的,环境有 iOS8、iOS9、iOS10;
    
    在 Android 上,
    
    旧版本,小程序逻辑层的 javascript 代码运行中 X5 JSCore 中,视图层是由 X5 基于 Mobile Chrome 57 内核来渲染的;
    
    新版本,小程序逻辑层的 javascript 代码运行在 V8 中,视图层是由自研 XWeb 引擎基于 Mobile Chrome 67 内核来渲染的;
    
    在 开发工具上,小程序逻辑层的 javascript 代码是运行在 NW.js 中,视图层是由 Chromium 60 Webview 来渲染的。
    

    Appium的组件

  • 相关阅读:
    Tomcat + Mysql高并发配置优化
    Qt Widget 利用 Qt4.5 实现酷炫透明窗体
    使用VC2005编译真正的静态Qt4.4.3程序 good
    详解 Qt 线程间共享数据(使用signal/slot传递数据,线程间传递信号会立刻返回,但也可通过connect改变)
    浅析在QtWidget中自定义Model(beginInsertRows()和endInsertRows()是空架子,类似于一种信号,用来通知底层)
    英国著名芯片厂商与苹果谈崩 中资收购机会来了!
    跨站脚本攻击(XSS)
    Kafka 协议实现中的内存优化
    读取配置信息
    英语面试准备
  • 原文地址:https://www.cnblogs.com/an5456/p/11423510.html
Copyright © 2020-2023  润新知