51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2760|回复: 3
打印 上一主题 下一主题

[Appium] 我的Appium学习记录—— iOS 10.3.2 + Appium 1.6.4 真机实战

[复制链接]
  • TA的每日心情
    无聊
    5 天前
  • 签到天数: 1050 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2017-10-20 15:59:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    百度google了一轮,最大的感触是:好多教程都不适用啊!要么是Appium版本旧,要么是iOS版本旧。想找一篇详细的“从入门到放弃”的教程都没有,之前搭Android环境的时候,能搜到很多十分详实的教程,而iOS的就有点蛋疼了。
    然而,坑还是要入的,所以,就从搭环境开始吧。
    环境搭建
    1. Xcode
    必须承认,我是Mac OS新手,有Linux的基础,用了几天Mac OS,算是基本会用了……
    本文的系统版本为Mac OS 10.12.5,由于陪测的iOS用的是10.3.2,所以Xcode必须要装上新的8.3.2(不然没有SDK),Xcode在App Store里安装就好了。

    2. Appium
    Appium向来有命令行版的和GUI版的——我选择后者,到官网下载安装最新的Appium Desktop 1.0.2的dmg,里面带了1.6.4的Appium。

    3. Appium客户端库
    Python、Ruby、Java、Javascript、PHP、C#等,任君选择,去官网下载。
    例如我用Python,就安装Appium-Python-Client,在终端运行
    1. sudo easy_install pip   # 系统自带easy_install
    2. pip install Appium-Python-Client --user  # 加上--user是因为Mac下有权限的问题
    复制代码
    4. Homebrew
    Homebrew相当于Linux下的apt-get、yum,要用它来安装node,在终端运行
    1. /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    2. brew -v      # 显示版本,如Homebrew 1.2.1
    复制代码
    5. node
    1. brew install node
    2. node -v    # e.g. v7.10.0
    复制代码
    6. appium-doctor相关
    用来检测Appium相关环境有没有装好的工具:
    1. npm install -g appium-doctor

    2. # 装好之后 检测一下iOS的环境有没有配置好 如果不加--ios 则检测Android和iOS
    3. appium-doctor --ios

    4. # 它提示我缺少Xcode Command Line Tools和Carthage,那就补上
    5. xcode-select --install
    6. brew install carthage
    复制代码
    7. 还有一些库
    1. brew install libimobiledevice --HEAD
    2. npm install -g ios-deploy   # for iOS 10+
    复制代码
    8. WebDriverAgent相关(大坑)
    iOS 10+使用的是XCUITest,Appium使用的模块是appium-xcuitest-driver,其中引用了Facebook提供的WDA方案来驱动iOS的测试。
    装Appium Desktop的时候,它里面带了一个WebDriverAgent,但是这个自带的是有问题的!会造成不能使用Inspector,卡了很久!从Facebook那里自己clone一份才是王道:
    1. cd ~
    2. git clone https://github.com/facebook/WebDriverAgent.git
    3. cd WebDriverAgent
    4. mkdir -p Resources/WebDriverAgent.bundle
    5. ./Scripts/bootstrap.sh    # 开始下载并编译 编译不应该报错


    6. cd /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/
    7. rm -rf WebDriverAgent   # 把自带的删掉
    8. ln -s ~/WebDriverAgent WebDriverAgent  # 用facebook的原版替换回去
    复制代码
    经过了baidu和google,用以上方法解决了不能Inspect的问题。

    在使用Appium时,需要把WDA装到真机上,然后又会遇到证书的问题,我也不是很明白,总之跟provisioning profile有关。

    用Xcode打开目录下的WebDriverAgent.xcodeproj,对于WebDriverAgentLib 和 WebDriverAgentRunner,勾选“Automatically manage signing”,把Team改成公司的,Bundle Identifier改成公司的证书可以接受的名字,具体可以参考官方文档操作,不懂的找开发同学协助。
    然后就可以把WebDriverAgentLib和WebDriverAgentRunner都编译到真机运行一下了。正常来说,会在桌面生成一个没图标的WebDriverAgentRunner,点开之后不会有什么反应,这就对了。
    终于把环境搭好了,感动啊。
    写测试脚本
    1. Appium server capabilities
    要让App跑起来,还需要了解Appium server capabilities,它告诉Appium服务器很多信息,例如开哪个App、手机的系统/版本、在哪台设备上跑(真机还是模拟器等)等。
    给出我用到的一些参数(in Python),其他capabilities请参考官方文档。
    1. # -*- coding: utf-8 -*-

    2. from time import sleep
    3. from appium import webdriver

    4. desired_caps = {}
    5. desired_caps['automationName'] = 'XCUITest' # Xcode8.2以上无UIAutomation,需使用XCUITest
    6. desired_caps['platformName'] = 'iOS'
    7. desired_caps['platformVersion'] = '10.3.2'
    8. desired_caps['deviceName'] = 'iPhone 7 Plus'
    9. desired_caps['bundleId'] = '需要启动的bundle id, 去问开发者'
    10. desired_caps['udid'] = '真机的udid 可在Xcode或iTunes里查看'
    11. desired_caps['newCommandTimeout'] = 3600  # 1 hour

    12. # 打开Appium服务器,start server后,尝试启动被测App
    13. driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    14. sleep(60)
    15. driver.quit()
    复制代码
    如果能跑起来,就是正常的,不然看一下报什么错。
    2. Inspector
    能跑起来只是第一步,更重要的是如何定位元素。
    Inspector的使用方法很简单,之前运行driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub’, desired_caps)之后,连接就已经建立好了,只需在浏览器进入http://localhost:8100/inspector即可,之后就可以使用熟悉的driver.find_element_by_xxx方法来定位元素啦。。
    后记
    Selenium的坑
    后来又遇到了一点坑,例如使用send_keys方法时,报
    1. Message: Parameters were incorrect. We wanted {“required”:[“value”]} and you sent [“text”,”sessionId”,”id”,”value”]
    复制代码
    错误,google了一下发现是selenium新版导致的问题,降级后解决:
    1. pip uninstall selenium
    2. pip install selenium==3.3.1
    复制代码
    手势操作
    由于XCUI的原因,之前的一些手势操作如swipe、pinch、TouchAction等都不能用了,可以参考这篇官方文档,使用driver.execute_script方法代替。如
    1. driver.execute_script('mobile: scroll', {'direction': 'down'})  # 向下滚动
    2. driver.execute_script('mobile: dragFromToForDuration', {'duration': 0, 'fromX': 374, 'fromY': 115, 'toX': 200, 'toY': 100})  # 从右往左拖
    复制代码
    对于直接用坐标的,还要注意逻辑分辨率的问题,如iPhone 7 Plus的逻辑分辨率是414×736。
    最后
    刚接触iOS的Appium,之后肯定还会遇到问题,会继续更新本文。
    更新,最近更新到了Appium Desktop 1.1,里面带了1.6.5的Appium,使用起来暂时未发现明显区别。
    附上一些参考:

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏1
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2017-11-26 18:46
  • 签到天数: 382 天

    连续签到: 1 天

    [LV.9]测试副司令

    2#
    发表于 2017-10-20 16:47:33 | 只看该作者
    这个文章超赞的!学习了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2017-10-20 18:20:05 | 只看该作者
    楼主腻害,期待您的继续更新
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2017-10-26 15:17:30 | 只看该作者
    山外有山,人外有人。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-26 03:10 , Processed in 0.068736 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表