手机调试python的软件_Appium+Python(ios真机移动端App H5混合自动化实战测试)

一、环境搭建篇

(一)安装JDK

大家自行安装

(二)安装Appium

1、appium desktop

2、appium server

> brew install node # get node.js

> npm install -g appium # get appium

> npm install wd # get appium client

> appium & # start appium

> node your-appium-test.js

(三)iOS真机环境配置

1、Homebrew

如果没有安装过Homebrew,先安装

2、npm

3、安装依赖库

brew install libimobiledevice --HEAD  #可获取ios真机设备的信息

sudo npm install -g ios-deploy --unsafe-perm=true #如果要在iOS10+的系统上使用appium,则需要安装ios-deploy

brew install carthage

brew install usbmuxd

4、appium-doctor安装

npm install appium-doctor -g

安装后执行appium-doctor –ios指令,可以查看与iOS相关配置是否完整,下图是全部配置都成功,如果出现有一项不正确在执行一次就可以,或者直接跳过

appium-doctor –ios

5、更新Appium中的WebDriverAgent

2)cd进入下载后的WebDriverAgent文件

3)执行./Scripts/bootstrap.sh

4)用Xcode打开WebDriverAgent.xcodepro文件

配置WebDriverAgentLib和WebDriverAgentRunner的证书

如图所示配置,

修改bundleid,随便修改,只要不跟已经注册过的冲突就行了,要求唯一

team选择真实的开发者账号

手机连上电脑

选择自己的手机

然后点击test运行

 

如果出现如下图错误,在ios设备-设置-通用-描述文件和设备管理,信任一下开发者,再次test运行就不会出现错误了

运行成功后,在xcode控制台可以打印出ip地址和端口号

进入到Appium中的WebDriverAgent目录,目录路径如

/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/

将自己下载并编译后的WebDriverAgent替换Appium原有的WebDriverAgent

(六)利用Appium-Python-Client进行iOS的自动化测试

这一步是将python与appium关联起来

在终端输入:pip install Appium-Python-Client,安装即可

(七)Appium中开启iOS webview调试进行h5自动化测试

在做ios的h5页面测试时,测试包必须要使用develop证书打包,app要是debug包,才可以进行真机测试

实践:如果在ios真机的webview页面执行appium自动化,需要做以下准备:

1)安装ios_webkit_debug_proxy,在执行webview自动化时必须启动该服务

a.brew install ios-webkit-debug-proxy

2)运行ios-webkit-debug-proxy

a.官方提供的命令:ios_webkit_debug_proxy -c UUID:27753 -d

b.使用chrome dev-tools调试

i.运行命令

ios_webkit_debug_proxy -f chrome-devtools://devtools/bundled/inspector.html

ii.根据日志提示,获得端口并打开页面对应端口页面,如lcoalhost:9221

iii.点击设备提示拷贝链接到地址栏即可访问;

c.使用safari调试

i.打开mac上的safari浏览器开发者模式

ii.打开设备上的webview页面

iii.点击safari浏览器菜单中的开发-device,选择进程;

在appium中使用ios-webkit-debug-proxy:

第一种方式:set the desired capability,加上"startIWDP":true,

// example desired capabilities

{

"browserName":"Safari",

"platformName":"iOS",

"deviceName":"iPhone 7",

"automationName":"XCUITest",

"startIWDP":true,

"udid":"auto"

}

第二种方式:直接手动启动ios-webkit-debug-proxy,然后再执行自动化,注意此时需要制定端口27753(appium默认iwdp端口为这个)以及设备ID,即

ios_webkit_debug_proxy -c 17d5c2ae122f79a23fbd29168e0948dce22e8ce5:27753 -d

二、元素定位方法篇

(一)通过weidtor定位元素

1)安装

终端中输入,安装weditor

pip install weditor

2)启动

注意:先要运行webdriveragent

然后终端输入命令:python -m weditor

点击connect后,出现手机画面,reload是同步手机画面

点击界面元素,右侧出现该元素的定位信息

(二)通过appium desktop定位

1、运行Appium-Desktop,点击start server,开启server

2、点击Start Inspector Session按钮

3、配置Desired Capabilities

如何获取设备信息?

设备连接上电脑,然后在终端输入idevice_id -l,就可以显示当前设备的udid

ideviceinfo显示当前设备的信息,可以查看当前的deviceName, platformName

SHAPE \* MERGEFORMAT

ideviceinstaller -l查看当前设备所有安装的app的信息

配置好信息后,点击start session

运行成功后,会弹出一个控制界面,在该界面中可以控制手机上正在运行的程序,可以定位元素

三、python+appium+ios,自动化测试实践

(一)新建文件test.py

(二)简单自动化脚本编写

#encoding=utf-8

import time

import os

import unittest

from appium import webdriver

#初始化

class MyTestCase(unittest.TestCase):

def setUp(self):

desired_caps = {

'platformName': 'iOS',

'deviceName': 'iphone',

'platformVersion': '12.4',

'bundleId' : 'com.jack.TongHua',

'udid' : 'bf5ffb03be1c90e05665f41dd648b8fb60a0c2c0', 'startIWDP':'true'

}

#初始化驱动

self.driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)

def testRefresh(self):

#点击刷新按钮

self.driver.find_element_by_accessibility_id("btn update").click()

def tearDown(self):

#退出

self.driver.quit()

if __name__ == '__main__':

unittest.main()

1、对类MyTestCase添加setUp函数(这是测试用例执行前的准备动作,负责告诉appium监听那个端口、与那个手机连接、安装那个应用等信息)

2、对类MyTestCase添加TearDown函数(这是测试用例执行结束后的动作,可以执行保存执行结果等操作)

(三)脚本写好后,先要运行webdriveragent

方法一:用xcode的运行webdriveragent

方法二:使用命令行运行webdriveragent

先切到webdriveragent目录下,然后输入xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination id='bf5ffb03be1c90e05665f41dd648b8fb60a0c2c0' test

(四)执行自动化测试脚本

(五)pyhton+appium+iOS,遍历真机的webview

1、运行ios_webkit_debug_proxy

ios_webkit_debug_proxy -c bf5ffb03be1c90e05665f41dd648b8fb60a0c2c0:27753 -d

2、driver.contexts获得页面所有context,这个方法会将context存在list里,打印出list内容,查看你要的webview在第几个,用switch_to.context()切换到那个webview即可,代码如下

#假设我的目标webview存在list里的第三个

myWebview = self.driver.context[2]

self.driver.switch_to.context(myWebview)

这样就切换到了目标webview,接下来就可以像web自动化一样,操作html元素了。

3、怎么得到元素属性

1).启动webkit服务,并指定谷歌浏览器进行监听

ios_webkit_debug_proxy -f chrome-devtools://devtools/bundled/inspector.html

2).运行用例代码,停留在含webview的页面

3).谷歌浏览器地址输入http://127.0.0.1:92223,就可以看到手机的webview url

4)将url复制出来,就可以像定位web元素一样去定位h5元素

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机专业的学生该选择日后的人生道路?继续从事IT还是考公务员……

问题来自知乎原问题如下:知乎上的盆友们大家好!我是某高校大二学生。万能的知友们,有相关经验的大家给点宝贵意见呗,万分感谢。个人问题:我当时是听说这一行工资高,因为家里条件一般,所以想要挣…

file_put_contents()写入数组

file_put_contents()写入数组 $arr array(name>张三,‘age’>26, sex>男 ) $str var_export($arr,TRUE); file_put_contents($filename,$str);转载于:https://www.cnblogs.com/icefei/p/6773916.html

JVM垃圾收集器与内存分配策略学习总结

方法区: 1.线程共享 2.储存类信息,常量,静态变量,编译器编译后的代码 3.非堆(别名)用于区分Java堆 4.不需要连续的内存 5.可以固定或可扩张 6.选择不实现垃圾回收//这个区域很少进行垃圾回收 7.针对常量池回收 8.对类型的卸载 9.无法满足内存分配需求抛出OutOfMemoryError4 虚…

汇编比较两个数大小_计算机是怎样跑起来的 -- 体验一次汇编过程

标志内存或I/O中存储单元的数字叫做“地址”。CPU中的标志寄存器有什么作用?用于在运算指令执行后,存储运算结果的某些状态。从程序员的角度看硬件CPU:种类,时钟信号的频率。可以使用哪种机器语言取决于CPU的种类。内存信息&#…

Nginx 作为 WebSockets 代理

WebSocket 协议给我们提供了一个创建可以支持客户端和服务端进行双向实时通信的web应用程序的方法。相比之前使用的方法,WebSocket(作为HTML5的一部分)可以使我们更容易开的发出这种类型的应用程序。绝大多数的现代浏览器都支持WebSocket&…

设计模式小结

开始的毛病:变量命名不规范,if-else判断有的代码做无用功,代码健壮性太差,没有做try-cath异常处理 工厂模式(创建型模式): 创建对象接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建延伸到子类进行 主要解决接口选择问题,明确计划不同条件下执行创建不同实例 通过子…

android区块链 钱包_区块链钱包Cashbox 开发工程师聊一聊开源

今天与大家聊一聊软件开源。事情的起因是一次闲谈的时候,市场部的同事表示:不做软件开发的人不能够理解为什么要把软件源代码公开出去。当时的我很惊讶,因为就像他们不理解为什么要开源一样,我也不理解他们为什么不理解为什么要开…

dom4j创建、解析xml文件(增删改查)

先对xml文件进行解析,xml文件如下图所示 <?xml version"1.0" encoding"UTF-8"?><?eclipse version"3.4"?> <student1> <studentID>001</studentID> <name>sanny</name> <major>…

Java的Class类文件结构及基本字节码指令

Class类文件的结构 概念:Class文件是一组以8位字节为基础单位的二进制流 按顺序整齐排列 没有任何分隔符,内容全部是运行时的必要数据,没有空隙存在 排序方式:高位在前 Big-Endian:最高字节在地址最低位,最低字节在地址最高位 Little-Endian:相反 储存方式:类似于C语言结构体…

Android 7.1 32位apk导致的系统库找不到问题

出现问题 因为我们安卓7.1系统的应用都是64位的APK&#xff0c;我们自己开发的应用是32位的APK&#xff0c;这样在启动的时候&#xff0c;就大概率的出现库找不到的问题。 错误的日志如下&#xff1a; Line 440: 03-12 10:48:39.620 634 634 W PackageManager: Instruct…

python基础知识下载_Python基础知识(一)

一、安装pythonwindow系统下先下载的 python 安装包&#xff0c;直接安装即可。为确认是否安装正确&#xff0c;可用系统记事本创建一个hello.py的程序其中包含如下内容&#xff1a;1 #!/usr/bin/env python32 print("Hello", "World!")代码说明&#xff1…

单词的理解 —— 词义的变化(翻译)

mimic&#xff1a;模仿&#xff0c;摹拟&#xff08;而不是最小化&#xff09;minder&#xff1a;n. 看守者&#xff1b;照顾者 保镖等近似含义&#xff1b;outstanding&#xff0c;outstanding work&#xff1a; 未完成的工作&#xff0c;backlog&#xff1a;n. [管理] 积压的…

JVM类加载机制_字节码执行引擎_Java内存模型

类加载机制: 类加载生命期:加载(Loading),验证(Verification),准备(Preparation),解析(Resolution),初始化(Initialization),使用(Using),卸载(Unloading)初始化:1.遇到new,getstatic,putstatic,invokestatic指令,类没有进行初始化,先触发初始化2.java反射机制3.初始化一个类,…

最新车载导航端口检测工具_高德地图这个功能 把微信都没做好的车载社交解决了?...

在汽车网联化和智能化带给人们的诸多想象里&#xff0c;车内社交似乎是最虚无缥缈的那个。在移动互联网领域&#xff0c;微信通过满足人们社交需求这个基本点&#xff0c;构建起庞大的用户群体&#xff0c;展示出巨大的市场前景。但在驾车场景下&#xff0c;车载社交该怎么玩&a…

王译潇20162314 第九周作业总结

学号 20162314 2016-2017-2 《Java程序设计》第九周学习总结 教材学习内容总结 数据库是为其他程序提供数据的应用软件 关系数据库通过唯一的标识符在不同表的记录间建立了关系 JDBC API用来建立到数据库的连接 CREATE TABLE SQL 语句用来创建新的数据库表 ALTER TABLE SQL 语句…

sketchup边线设置_春天花花天桥,SketchUp草图大师快速建模!

最近小吧在网上看到一座设计很特别的天桥&#xff0c;形状很像一朵花&#xff0c;名字也十分写实——春花天桥。喏&#xff0c;就是下面这个家伙&#xff01;图片来自网络春花天桥是2011年深圳举办大运会前夕投资建设的形象提升工程之一&#xff0c;在建设初期就被定位为地标性…

自言自语

随笔, 自我审视, 需要反思 最近这段时间, 各种艰难困苦早已将最初的激情冲刷地只剩下骨头了, 每天拖着疲惫的身子, 总是做着没有意义的事; 迷失了自我, 总把时间浪费, 而在做浪费时间的事却没有思考做这件事是否是有意义的, 是否是有价值的, 是否是在浪费时间; 没有思考, 就像行…

忧愁无处发

顶着好多方面的压力回家了....过得不好。。。。转载于:https://www.cnblogs.com/ysw6/p/6789910.html

python求直角三角形第三边公式_直角三角形已知两边求第三边公式

展开全部解&#xff1a;分两种情况讨论1、需要求的第三边为斜边时&#xff0c;第e69da5e887aa3231313335323631343130323136353331333433643030三边长度√a^2b^2 (ab分别为两直角边的长度)2、需要求的第三边为直角边时,第三边长度√c^2-a^2 (其中c为斜边,a为已知直角边)扩展资料…

android 7.1 apk的systemuid和系统应用Setting相同导致开机找不到库的问题

1、前言Android apk加载机制这就是我最近在解决的一个问题&#xff0c;32位的apk可以用32位的库&#xff0c;那64位的apk可以用64位的库&#xff0c;如果我想64位的apk同时使用32和64位的库呢&#xff1f;android加载so文件的机制apk在安装的过程中&#xff0c;系统就会对apk进…