iOS自动化真机测试验证环境过程中常见问题解析

iOS自动化真机测试验证环境过程中常见问题解析,第1张

> 本文节选自霍格沃兹测试学院内部教材

本章节主要讲解 iOS 自动化真机配置以及在 iOS 真机执行自动化时常见问题与解决方法。

真机使用的Capability  

与模拟器不同,真机测试需要如下的 Capability

方式一:设置 App 路径,启动 App(自动安装 App)

                        

    {  "app": "/Users/seveniruby/Library/Developer/Xcode/DerivedData/UICatalog-ftyzdbgapjmxxobezrnrxsshpdqh/Build/Products/Debug-iphoneos/UICatalogapp",  "automationName": "XCUITest",  "platformName": "ios",  "xcodeOrgId": "xxxxxx",  "xcodeSigningId": "iPhone Developer",  "udid": "9df22446af15919c494c85b4c1c8b00eaa3a5bd0"}

方式二:根据 App 包名启动 App

                           

    {  "platformName": "ios",  "bundleId": "comexampleapple-samplecodeUICatalog",  "automationName": "XCUITest",  "deviceName": "iPhone",  "udid": "auto",  "xcodeOrgId": "xxxxx",  "xcodeSigningId": "iPhone Developer"}

  app: Xcode 选择真机编译后的 app 位置

  bundleId: 每个 App 的标识,相当于 Android App 的 appPackage

  xcodeOrgId: Team ID,获取方法详见`>

这时候我们也可以通过TCP/IP协议来连接:

步骤:

1、手机跟电脑连接同一个网络下

2、使用usb线连接手机

3、打开手机端口: adb tcpip 5555 (默认是5555端口,可自己修改)

4、查看手机ip地址:adb shell ip -f inet addr show wlan0

5、连接设备:adb connect 192xxxxxxxxx:5555 (前面打印的手机ip地址)

6、查看是否连接成功

即连接成功

接下来可以拔掉usb线,电脑已经链接上我们的安卓设备了,可以直接运行脚本进行调试了

Desired Capabilities在启动session的时候是必须提供的。

Desired Capabilities本质上是key value的对象,它告诉appium server这样一些事情:

本次测试是启动浏览器还是启动移动设备?

是启动andorid还是启动ios?

启动android时,app的package是什么?

启动android时,app的activity是什么?

Appium的Desired Capabilities是扩展了webdriver的Desired Capabilities的,下面的一些通用配置是需要指定的:

automationName:使用哪种自动化引擎。appium(默认)还是Selendroid?

platformName:使用哪种移动平台。iOS, Android, orFirefoxOS?

deviceName:启动哪种设备,是真机还是模拟器?iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4, etc

app:应用的绝对路径,注意一定是绝对路径。如果指定了appPackage和appActivity的话,这个属性是可以不设置的。另外这个属性和browserName属性是冲突的。

browserName:移动浏览器的名称。比如Safari' for iOS and 'Chrome', 'Chromium', or 'Browser' for Android;与app属性互斥。

udid:物理机的id。比如1ae203187fc012g。

下面这些属性是android平台特定的:

appActivity:待测试的app的Activity名字。比如MainActivity, Settings。注意,原生app的话要在activity前加个""。

appPackage:待测试的app的java package。比如comexampleandroidmyApp, comandroidsettings。

本文主要讨论android平台的appium测试方法和技巧,因此在这里就不列出ios设备特定的属性了。

更多信息请参考 官方文档

在这里我们发现,我们经常要获取app的package和activity名字,那么有什么工具可以让我们方便的获取到这些信息呢?下一节讲回答这个问题。

在APPium+Robotframework框架上一台电脑连接多台安卓手机的自动化测试,结果见下。多台手机的运行的脚本必须按照顺序执行,不能同步执行。每个脚本之间可以相互独立也可以高度重合,区别仅仅在于设备号 deviceName和udid(一定得加上udid,否则会出现串设备号的问题)的不同。

要保证填写不同的udid(cmd中执行adb devices即可查询到),以此来确保在不同的设备中运行相应的自动化测试用例。

大多数安卓手机会自动安装unlock和settings两个应用,为了保证重复执行成功,得在脚本中执行完用例后删除这两个应用,执行dos口令就可以实现。

一、常见属性的用法

二、通过截图就可以看到元素的属性,那怎么元素定位呢?

三、问题

xpath 相对定位:如果相对定位中这个元素是有 id 的,这个 id 是唯一的,xpath 定位中优先通过 id 来定位。

class 属性对应的值是元素类型(是一个文本视图工具),Web 自动化中元素类型代表 Input、image、button 这样的标签名。

「resource-id 是唯一的,但是在 App 页面中并不绝对唯一。大部分情况下是唯一的,小部分情况下是重复的。」

如果一个页面中,元素的样式非常像,那很有可能它们的 id 就是一样的。UIAutomator Viewer 这个自带的工具是不能看出这个 id 是不是绝对唯一的。

「假设 resource-id 是唯一的,用相对定位这样定位:」

和 Web 自动化一样的玩法: 元素类型[@属性名称=属性值]

这里的 class 不是 Web 网页中的 class 属性了,这里代表它的标签名和元素类型(它是一个、一个文字、链接还是一个按钮呢?学会区分)。

如果 resource-id 不是唯一的,那么上面那个表达式是不够的,还会追加到上层的 Linearlayout 、 RelativeLayout 、包括祖先里面的一些层级都会放进来。

如果没有安装“升级 uiaumatorview-添加元素定位”就只能靠自己来判断。看下其它和它长得很像、元素的格式、风格、样式、页面布局都和它一模一样的元素,看下各位的 id 是否全都是一样的。

如果用了“升级 uiaumatorview-添加元素定位”,可以根据它的表达式自己来判断。

任何一个元素一定会有个 class,因为它是一个类别。Linearlayout 是一样的,布局也是安卓的控件,所以也会有控件名称、控件类型。

以下这些东西只有 2 个值,False 和 True。

以上这些属性在很多情况下是没有用的,但是在关键的时刻是很有用的。

例如想筛选当前页面中可以滚动的元素,通过 scrollable 等于 True 来过滤。

和 Web 自动化一样的,都是通过元素属性来定位,而且比 Web 自动化简单。

App 中只支持 5 种元素定位方式。虽然继承了 Web 自动化的元素定位,它之所以继承呢,是用到了其中的一个部分。

1、通过 id 定位元素:resrouce-id

2、通过 ClassName 定位:classname

3、通过 AccessibilityId 定位:content-desc

4、通过 AndroidUiAutomator 定位

5、通过 xpath 定位

1、通过 id 定位元素:resrouce-id

2、通过 ClassName 定位:classname

3、通过 xpath 定位

有 find_element_by_id() 就有 find_elements_by_id()

可以找到多个,它的返回值一样是列表。它的返回对象一样是 Web element 。

在它的下面有个 find_element_by_id() 。它的方法和 Web 自动化是一样的。

虽然这里代表的是元素类型,但它同样是 class 属性。

这里有点区别,但是方法名还是没有区别的。这个 class 的属性其实没有多大用处,一个页面中肯定很多属性的值和它很像的。所以这种用法不多。

既然是类别,可能有好多种,输入框也有好多种,它代表的是一种元素的类型。

「Web 自动化中 xpath 定位是最常用的,但是 App 自动化中 xpath 是最不想用的。原因是它的效率太低了。」

「如果全部只用 xpath 定位,问题会比较大,能不用 xpath 就不用 xpath」

AccessibilityId 是移动端特有的定位方式。

这是之前看到的类,这个类当中除了继承了 Web 自动化之外,对于安卓有 2 种,其中一种是 ACCESSIBILITY_ID 。

如果通过这种方式定位,对应的方式就是:

此处应输入 content-desc 的值,但是这里是空的,所以不能通过它定位。

但是 find_element_by_accessibility_id() 是另外一种 id,代表它在当前这个页面中也是很独特的。只要它有值,基本上可以通过它来定位。

用的是安卓 UiAutomator 这个自动化框架中提供的元素定位方式。所以想用这种元素定位方式,就必须了解它到底是怎么做的。

UiAutomator 自动化库是 Java 语言写的,所以它的参数是 Java 代码。UiAutomator 自动化库提供了 text。而 「元素有文本内容就可以通过文本内容来定位。」

这个里面的参数就必须是 UiAutomator 当中提供的定位方式。UiAutomator 是 Java 实现的,那么它的定位类型肯定也是 Java 实现的。

>

官方网站是有这方面的资料,给出了如下的命令。

$ appium -p 4736 -bp 4836 -U b33aa57c --session-override

// -p Appium的主要端口

// -bp Appium bootstrap端口

// -U 设备id

其实就是启动多个端口来实现多设备并行。然后以此为基础再自己封装方法就行了,不同的设备-p -bp -U都不同

以上就是关于iOS自动化真机测试验证环境过程中常见问题解析全部的内容,包括:iOS自动化真机测试验证环境过程中常见问题解析、史上最全-Appium自动化测试框架、appium自动化测试 电脑无线连接手机等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9715490.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存