array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 appium(三)appium-desktop的使用 - 爱码网
yjh1995

  appium-desktop的作用:方便调试和查找页面元素

1、首先启动mumu模拟器,然后使用adb 连接到模拟器

2、启动appium-desktop,先看看需要设置些什么东西

  (1)simple界面

  Host:Android设备的ip,若使用模拟器,使用默认的 0.0.0.0即可

  Port:端口使用默认的4723即可

如果是真机,Host 和 Port 不用填

  Edit Configurations:设置 ANDRODI_HOME 和 JAVA_HOME,如果已经配置了这两个环境变量,这appium会自动读取,建议先提前配置两个环境变量

   (2)Advanced界面

  Logfile Path:设置appium的log路径

  Log Level:设置log的等级,默认debug即可

  Local Timezone:时区设置,可看情况勾选

  Log Timestamps:日志显示时间戳

  Supress Log Color:设置日志颜色,方便读

设置好了后即可连接Android设备,start server(启动服务),start inspector session(打开调试界面)

3、设置 desired capabilities

  常用的设置如下

{
"platformName": "Android",  //设备类型 Android 或 ios
"platformVersion": "6.0.1",  // Android 或 ios 版本
"deviceName": "127.0.0.1:7555",  //设备名称,模拟器即为 ip,手机可使用 adb连接时的设备名称,使用 adb devices可查看
"appPackage": "com.baidu.tieba",  //appPackage,下面会介绍获取方法
"appActivity": ".tblauncher.MainTabActivity",  //appActivity,下面会介绍获取方法
"noReset": true,  //不清除缓存
//unicodeKeyboard 和 resetKeyboard 设置Unicode键盘,让脚本能够输入中文,成对使用,单独使用会被ignore
"unicodeKeyboard":true,  
"resetKeyboard":true
}
连接设备必须的属性 :platformName,platformVersion,deviceName,appPackage,appActivity

获取 appPackage 和 appActivity 的方法:首先启动对应的App,然后输入命令 adb shell dumpsys activity |findStr "mFoc"

 前面的即为 appPackage ,后面的为 appActivity ,注意千万别把 . 漏掉了

4、启动 APP

  (1)启动APP失败

  1.出现下图的错误时,不要使用 Automatic Server,使用 Custom Server 启动

 

  2.有可能会有模拟器的adb和Android studio的adb版本不同而导致链接不上的情况,保证mumu模拟器ADB版本号与SDK的abd版本一致,将SDK的abd复制到mumu模拟器路径下并修改文件名,替换原有文件

  (2)启动后的界面可以 查找元素,按坐标滑动,按坐标点击,录制脚本 等功能,录制脚本时会自动生成 代码脚本,可选择 Java,Python等,写脚本时可以用来参考

5、元素定位 

  1. app的xml结构中的 attribute中的 content-desc 对应于元素定位时用到 accessibility id,定位使用 driver.findElement(MobileBy.AccessibilityId("请输入QQ号码或手机或邮箱"))

  2. app的xml结构中的 attribute中的 resource-id 对应于元素定位时用到的 id,定位使用 driver.findElement(By.id("com.tencent.mobileqq:id/login"))

  3. 依然可以使用xpath 的属性定位,写法和selenium的xpath的属性定位相同

6、Java代码

  需要先拉去jar 包:selenium,Java-client

  注意,使用 代码启动APP时,启动appium-desktop的服务即可(start server),不要打开调试界面(start inspector session),防止冲突

    //使用appium-desktop启动APP
    @Test
    public void appConnect() throws InterruptedException, MalformedURLException {
        //配置Capabilities参数
        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
        //设置必须的参数
        desiredCapabilities.setCapability("deviceName", "127.0.0.1:7555");
        desiredCapabilities.setCapability("platformName", "Android");
        desiredCapabilities.setCapability("platformVersion", "6.0.1");
        desiredCapabilities.setCapability("appPackage", "com.tencent.mobileqq");
        desiredCapabilities.setCapability("appActivity", ".activity.LoginActivity");
        //以下为可选参数
        //不要重置签名
        desiredCapabilities.setCapability("noSign", true);
        //不清除缓存
        desiredCapabilities.setCapability("noReset", true);
        //设置使用unicode键盘,让自动化脚本实现过程中能够输入中文,成对使用,单独使用下面的某一个属性会ignore
        desiredCapabilities.setCapability("unicodeKeyboard", true);
        desiredCapabilities.setCapability("resetKeyboard", true);
        //电脑连接了多个设备时,需要指定设备
        //desiredCapabilities.setCapability("udid","127.0.0.1:7555");

        //创建driver对象,URL参数是固定写法,可参考appium-desktop的custom server的Remote Host,Remote Por,Remote Path
        AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities);
        //启动APP需要一定的时间,注意设置等待时间
        Thread.sleep(3000);
        //使用上面提到过的三种元素定位方式
        driver.findElement(MobileBy.AccessibilityId("请输入QQ号码或手机或邮箱")).sendKeys("123456");
        driver.findElement(By.xpath("//android.widget.EditText[@content-desc=\'密码 安全\']")).sendKeys("12456");
        driver.findElement(By.id("com.tencent.mobileqq:id/login")).click();

        Thread.sleep(10000);
        //关闭APP和driver
        driver.closeApp();
        driver.quit();
    }

分类:

技术点:

相关文章:

  • 2018-10-19
  • 2021-08-06
  • 2018-11-01
  • 2021-08-04
  • 2020-12-23
  • 2021-08-04
猜你喜欢
  • 2021-08-04
  • 2021-08-04
  • 2018-05-07
  • 2018-12-25
  • 2021-08-04
  • 2021-08-06
  • 2021-11-17
相关资源
相似解决方案