Appium学习-IOS初窥

背景

最近安卓那边做起来有点烦躁,主要还是我们的安卓第三方包用多了,导致超过了谷歌的上限,打不出包了,很多H5部分不好测试,我们的安卓开发总是习惯的禁掉webview句柄,给Activity加权限,导致跑出来的结果各种报错,换一个口味,玩玩IOS的自动化。

条件

测试IOS必须要Mac OS X系统,请不要问可不可以用Windows来测试IOS这种问题。

我电脑都是最新的版本,比如系统、比如xcode、比如Appium。

初衷

我是比较懒,不太想自己去看那些英文,结果搜索出来的结果,基本上都不是我想要的东西,好像整个网络上都是大神,并没有人来写这么一个手把手指导怎么跑官方demo的教程,只好自己去跑一下感觉感觉。

官方Demo

官方Demo当然是最好的一个东西,无奈官方的介绍也很短,还都是英文的。Github上有完整的官方Demo源码。全部一次性Down下来。在apps里面就能找到IOS的测试包了。就是下图这个东西了。

跑起来

跑起来很简单,如果Appium的环境是正常的,那么只要启动Appium的服务,然后执行Python的demo代码就行了。

官方的说明是这样的:

These are simple samples of how to use Python to run Appium tests. It is suggested that you use a test runner such as pytest or nose.

Sauce Labs examples require at least version 0.12 of the Appium Python Client, which includes the appium.SauceTestCase base class.

Usage:

py.test ios_simple.py
py.test -n2 --boxed ios_simple.py

成功执行后结果长这个样子。

不同的bash展示的是不一样的,在执行过程中你可以看到在IOS模拟器启动,然后启动官方demo,执行这两条用例的整个过程

Demo的说明

其实官方的Demo是非常简单的,你不需要知道IOS的代码是怎么跑起来的。demo是基于unittest测试框架写的。不懂的请在我的博客翻翻他们是如何运行的。

初始化驱动

class SimpleIOSTests(unittest.TestCase):

    def setUp(self):
        # set up appium
        app = os.path.abspath(‘../../apps/TestApp/build/release-iphonesimulator/TestApp.app‘)
        self.driver = webdriver.Remote(
            command_executor=‘http://127.0.0.1:4723/wd/hub‘,
            desired_capabilities={
                ‘app‘: app,
                ‘platformName‘: ‘iOS‘,
                ‘platformVersion‘: ‘9.3‘,
                ‘deviceName‘: ‘iPhone 6‘
            })

可以看到在初始化中比较重要的几个参数,app路径、系统名称、系统版本、设备名称。

从这些参数来看,用模拟器测试IOS就必须要有源码,如果没有源码你第一个app路径也都没办法填写。

第一条测试用例

def test_scroll(self):
        els = self.driver.find_elements_by_class_name(‘UIAButton‘)
        els[5].click()

        sleep(1)
        try:
            el = self.driver.find_element_by_accessibility_id(‘OK‘)
            el.click()
            sleep(1)
        except:
            pass

        el = self.driver.find_element_by_xpath(‘//UIAMapView[1]‘)

        location = el.location
        self.driver.swipe(start_x=location[‘x‘], start_y=location[‘y‘], end_x=0.5, end_y=location[‘y‘], duration=800)

这条用例就没什么好解释的了,和安卓上使用Appium基本上是一致的使用方式。首先找到classname是UIAButton的元素点击。然后再做一个滑动的操作。

第二条测试用例

def _populate(self):
        # populate text fields with two random numbers
        els = [self.driver.find_element_by_name(‘TextField1‘),
               self.driver.find_element_by_name(‘TextField2‘)]

        self._sum = 0
        for i in range(2):
            rnd = randint(0, 10)
            els[i].send_keys(rnd)
            self._sum += rnd

    def test_ui_computation(self):
        # populate text fields with values
        self._populate()

        # trigger computation by using the button
        self.driver.find_element_by_accessibility_id(‘ComputeSumButton‘).click()

        # is sum equal ?
        # sauce does not handle class name, so get fourth element
        sum = self.driver.find_element_by_name(‘Answer‘).text
        self.assertEqual(int(sum), self._sum)

简单来说就是两个输入框随机输入10以内的数字,求和,然后下一个断言。代码看起来还是比较简单的,难怪没人会愿意写这么一个教程,因为这基本上就是Down下来直接跑就行了。。。。。。

最后

Appium无论执行Android还是IOS都有一个通病。效率很低。官方的两个Demo这么简单的例子,执行起来需要1分半,要是测试案例多了,一跑就是一整天啦!

时间: 2024-10-12 06:08:30

Appium学习-IOS初窥的相关文章

STM32学习笔记之一(初窥STM32)

怎么做好学习笔记? 答:自我感知-->学习知识-->归纳总结-->自我升华(真正属于自己的知识是,抛开书本,运用时,你还能记得的思想) 自我感知--看到知识概念,先自我感觉那应该是个什么东西(如:寄存器---寄存东西(数据)的地方嘛) 学习知识--有了自我感知后,就需要验证自己的感知是否正确,请记住,带着自己思想的学习是最高效的学习(如:寄存器---存什么东西呢?) 归纳总结--学习了大量知识后,就该汇总汇总了(如:寄存器---存数据(通用寄存器),存命令(PC),存地址(LR)) 自我

Hadoop学习笔记(9) ——源码初窥

Hadoop学习笔记(9) ——源码初窥 之前我们把Hadoop算是入了门,下载的源码,写了HelloWorld,简要分析了其编程要点,然后也编了个较复杂的示例.接下来其实就有两条路可走了,一条是继续深入研究其编程及部署等,让其功能使用的淋漓尽致.二是停下来,先看看其源码,研究下如何实现的.在这里我就选择第二条路. 研究源码,那我们就来先看一下整个目录里有点啥: 这个是刚下完代码后,目录列表中的内容. 目录/文件 说明 bin 下面存放着可执行的sh命名,所有操作都在这里 conf 配置文件所在

jQuery源码学习(2):选择器初窥

选择器初窥 代码架构: jQuery选择器可以依照传入数据的类型分为五大类: 传入字符串:$("div"), $("#id"), $(".div1"),$(".div p.title") 传入html代码:$("<div></div>"), $("<div>1</div><div>2</div>") 传入对象:$(d

Appium学习-关于Inspector

背景 既然开始折腾IOS了,那么第一步是把Demo跑起来看效果,<Appium学习-初窥>文中已经把官方的Demo跑起来了.现在要接下来做其他的事 Inspector问题 Inspector是Appium客户端给的一个工具,用来探测IOS的元素布局.当然Android也是可以用的,不过Android一般使用uiautomatorviewer. 不过我在使用的时候遇到了这么一个问题: Could not start a new session Be sure the Appium server

Flutter 即学即用系列博客——04 Flutter UI 初窥

前面三篇可以算是一个小小的里程碑. 主要是介绍了 Flutter 环境的搭建.如何创建 Flutter 项目以及如何在旧有 Android 项目引入 Flutter. 这一篇我们来学习下 Flutter 的 UI. 前言 说到 UI,我就简单说下 Flutter 作为一门跨平台语言具有的优势之一,提高效率吧. 举个例子: 假设现在要开发一个界面,Android 开发需要一天,iOS 开发也需要一天.那么就是两天. 如果你用 Flutter 开发,就只需要一天(因为 Android 和 iOS 都

初窥ElasticSearch

初窥ElasticSearch 官网上面的,不知道讲的是什么.. youtube上面有一个start with,内容是在windows下面跑这个elastic search,然后用一个fidler工具可视化测试 https://www.youtube.com/watch?v=60UsHHsKyN4 粗略看起来,其实es和其他db没什么大区别,只是在搜索上有很多强大功能,所以很适合用在需要搜索的项目.貌似用curl发送一个JSON格式的数据(实际上是命令)到es就可以做CRUD elasticse

Ioc容器Autofac系列(1)-- 初窥(转)

前言 第一次接触Autofac是因为CMS系统--Orchard,后来在一个开源爬虫系统--NCrawler中也碰到过,随着深入了解,我越发觉得Ioc容器是Web开发中必不可少的利器.那么,Ioc容器是用来做什么的?用了有什么好处?我相信如果不明白这两点就很难敞开心扉接受Ioc容器. 传统解耦设计的弊端 为方便描述,举个日志的栗子.我简化实现,一个Log类,一个SaveLog方法.如果其他类想拥有记日志功能,那么只需在内部包含一个Log类型的变量: 双击代码全选 1 2 3 4 5 6 7 8

玩转oo对象模型(1) 之 初窥c++对象模型

============================================== copyright: KIRA-lzn ============================================== 转载请注明出处,这篇是我原创,翻版必究! ============================================== 第二篇,如果写的好,请点个赞呦.当然有不对之处,非常欢迎拍砖!!!! 自我介绍: USTC研一学生,目前在intel实习,研发岗 第二篇

Swift初窥----Playground

Playground是随着Swift在WWDC2014推出的,从字面意思来理解,"playground"就是操场,游乐场的意思.在Swift中,这个"游乐场",可以一边写代码,一边预览效果,实现"所见即所写",这给程序员带来的方便是不言而喻的,通过两张图来对比: 从6步,简化成两步,是不是很酷?除了酷,Playground是可以应用在实际开发中的,在两个地方使用效果很好:用来快速预览界面控件效果,用来调试复杂算法. 现在来点干货, 预览image