【Mac + Python3.6 + ATX基于facebook-wda】之IOS自动化(二):安装facebook-wda库并编写简易自动化测试脚本

上一篇介绍完如何安装WDA,接下来开始正式安装开发库并编写自动化脚本。

目录: 

 

 

一、安装facebook-wda库

运行命令行安装:

pip install --pre facebook-wda

或者使用pycharm中,Preferences->Project->Project Interpreter->【+】(加号), 搜索:facebook-wda,并安装

 

举个栗子,页面元素定位,如下图,class、name一一展示:

 

 

通过“ideviceinstaller -l ”或者其他工具查找到APP软件的bundleId

$ ideviceinstaller -l
Total: 5 apps
com.ysr.scancode - 二维码扫描器 3
com.apple.test.WebDriverAgentRunner-Runner - WebDriverAgentRunner-Runner 1
com.sogou.sogouinput - 搜狗输入法 142709
com.netease.cloudmusic - 网易云音乐 1044
com.leqimea.recorderAudio - PP助手 10000

 但是,会一直报错Could not connect to lockdownd. Exiting.

痛苦了大半天,终于找到了解决办法:

参考:《IOS 执行ideviceinstaller -l ,结果报错Could not connect to lockdownd. Exiting.

上代码:

复制代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/10/16 11:42
# @Author  : zc
# @File    : test.py


import unittest
import wda


wda.DEBUG = False # default False
wda.HTTP_TIMEOUT = 10.0 # default 60.0 seconds

bundle_id = "com.chen.CityMineSafetyOne"  (通过上面获得)
c = wda.Client('http://localhost:8100')

# 启动应用
s = c.session(bundle_id)


class Test_safety(unittest.TestCase):

    def setUp(self):
        print("=======start!=======")
        pass

    def tearDown(self):
        print("=======stop!=======")
        pass

    def test1(self):
     # class、name定位参考网易图所示,这里只是举个栗子,并不是网易代码
        s(name='home btn newtask',className='Button').tap()

if __name__ == '__main__':
    unittest.main()
复制代码

 

运行成功!!!!

二、通过WEditor定位元素          返回目录

之前做uiautomator2-Android自动化时,用到了这个进行定位元素,非常方便,facebook-wda-IOS自动化也可以通过这个进行定位元素。

首先,启动weditor

python -m weditor

有时候会报错:OSError: [Errno 48] Address already in use

提示您地址已经被占用,所以我们可以查看weditor的17310端口,看看哪些软件占用了此端口:

复制代码
# 查看端口使用情况
lsof -i tcp:17310

COMMAND    PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Google     396 zhan  156u  IPv6 0x9b9eee3e3dae5dfb      0t0  TCP localhost:58732->localhost:17310 (ESTABLISHED)
python3.6 8244 zhan    4u  IPv6 0x9b9eee3e34507f3b      0t0  TCP *:17310 (LISTEN)

# 其中谷歌和py3.6占用了端口,选择杀死进程
kill 396
kill 8244
复制代码

接着再启动weditor,发现还是报错:

ModuleNotFoundError: No module named 'atx'

需要安装atx:

pip install atx==1.1.2.dev18
复制代码
$ pip install atx==1.1.2.dev18
Collecting atx==1.1.2.dev18
  Downloading https://files.pythonhosted.org/packages/16/75/f47630ae898e61900f0c32165916330bce718aa048e4abd1ce8408cef9ff/atx-1.1.2.dev18-py3-none-any.whl (2.2MB)
    100% |████████████████████████████████| 2.2MB 600kB/s 
Collecting imageio==1.5 (from atx==1.1.2.dev18)
  Downloading https://files.pythonhosted.org/packages/e8/b7/8d78cb388c1aa8648c65601572fb4c50cc36f5eff6b22f0ec69ef0d63ecc/imageio-1.5.zip (3.3MB)
    100% |████████████████████████████████| 3.3MB 444kB/s 
Requirement already satisfied: Pillow>=2.7.0 in /Users/zhan/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from atx==1.1.2.dev18)
Collecting PyYAML==3.11 (from atx==1.1.2.dev18)
  Downloading https://files.pythonhosted.org/packages/75/5e/b84feba55e20f8da46ead76f14a3943c8cb722d40360702b2365b91dec00/PyYAML-3.11.tar.gz (248kB)
    100% |████████████████████████████████| 256kB 3.7MB/s 
Collecting colorama==0.3.7 (from atx==1.1.2.dev18)
  Downloading https://files.pythonhosted.org/packages/b7/8e/ddb32ddaabd431813e180ca224e844bab8ad42fbb47ee07553f0ec44cd86/colorama-0.3.7-py2.py3-none-any.whl
Collecting numpy>=1.11.0 (from atx==1.1.2.dev18)
  Downloading https://files.pythonhosted.org/packages/0a/2b/726b7d4e4ba844d4805c52b8e05299a5f49bc16c69ca0fa8e1964c0871fe/numpy-1.15.2-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (24.5MB)
    100% |████████████████████████████████| 24.5MB 60kB/s 
Collecting tqdm==4.5.0 (from atx==1.1.2.dev18)
  Downloading https://files.pythonhosted.org/packages/83/4f/50d87b628eeae681eb9b5217840a215808ce3cf42c0d72752be286b1bfdf/tqdm-4.5.0-py2.py3-none-any.whl
Collecting facebook-wda==0.1.1.dev1 (from atx==1.1.2.dev18)
  Downloading https://files.pythonhosted.org/packages/4b/01/fbe44ad81ef016f1cc4fb149ce684da1cff163464a6168a7b87c4bd4597d/facebook_wda-0.1.1.dev1-py3-none-any.whl
Requirement already satisfied: requests>=2.9.1 in /Users/zhan/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from atx==1.1.2.dev18)
Collecting futures==3.0.5 (from atx==1.1.2.dev18)
  Downloading https://files.pythonhosted.org/packages/55/db/97c1ca37edab586a1ae03d6892b6633d8eaa23b23ac40c7e5bbc55423c78/futures-3.0.5.tar.gz
Collecting maproxy==0.0.12 (from atx==1.1.2.dev18)
  Downloading https://files.pythonhosted.org/packages/2e/12/41e87a13b3e64373f73029ad1e826084afa64d4cdfa17baadc3ccde2ee02/maproxy-0.0.12.zip
Collecting atx-uiautomator==0.2.12.dev6 (from atx==1.1.2.dev18)
  Downloading https://files.pythonhosted.org/packages/42/40/bde514f5eb29d267cc06ab2bf890e972edf46345e24ebdae44d79b0f87e1/atx_uiautomator-0.2.12.dev6-py3-none-any.whl (2.9MB)
    100% |████████████████████████████████| 2.9MB 514kB/s 
Collecting AxmlParserPY==0.0.2 (from atx==1.1.2.dev18)
  Downloading https://files.pythonhosted.org/packages/38/2b/50f92036bd6d46cdb7b581f4a0a4c5c0081ccc1235e0db96b640ed0fdcba/AxmlParserPY-0.0.2.tar.gz
Requirement already satisfied: tornado>=4.4 in /Users/zhan/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from atx==1.1.2.dev18)
Collecting aircv==1.4.5 (from atx==1.1.2.dev18)
  Downloading https://files.pythonhosted.org/packages/66/5e/e58fd28a7a96e23a87cecf61f5d57acbae88812f22192afcbdbbb6015499/aircv-1.4.5.tar.gz (4.0MB)
    100% |████████████████████████████████| 4.0MB 402kB/s 
Requirement already satisfied: six>=1.10.0 in /Users/zhan/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from facebook-wda==0.1.1.dev1->atx==1.1.2.dev18)
Requirement already satisfied: idna<2.8,>=2.5 in /Users/zhan/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from requests>=2.9.1->atx==1.1.2.dev18)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /Users/zhan/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from requests>=2.9.1->atx==1.1.2.dev18)
Requirement already satisfied: certifi>=2017.4.17 in /Users/zhan/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from requests>=2.9.1->atx==1.1.2.dev18)
Requirement already satisfied: urllib3<1.24,>=1.21.1 in /Users/zhan/.pyenv/versions/3.6.1/lib/python3.6/site-packages (from requests>=2.9.1->atx==1.1.2.dev18)
Installing collected packages: imageio, PyYAML, colorama, numpy, tqdm, facebook-wda, futures, maproxy, atx-uiautomator, AxmlParserPY, aircv, atx
  Running setup.py install for imageio ... done
  Running setup.py install for PyYAML ... done
  Found existing installation: facebook-wda 0.2.1
    Uninstalling facebook-wda-0.2.1:
      Successfully uninstalled facebook-wda-0.2.1
  Running setup.py install for futures ... done
  Running setup.py install for maproxy ... done
  Running setup.py install for AxmlParserPY ... done
  Running setup.py install for aircv ... done
Successfully installed AxmlParserPY-0.0.2 PyYAML-3.11 aircv-1.4.5 atx-1.1.2.dev18 atx-uiautomator-0.2.12.dev6 colorama-0.3.7 facebook-wda-0.1.1.dev1 futures-3.0.5 imageio-1.5 maproxy-0.0.12 numpy-1.15.2 tqdm-4.5.0
You are using pip version 9.0.1, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
复制代码

在安装cv2,作用是读取图像相关的:

 pip install opencv-python

 

再次运行weditor,又发生错误:

from atx import ioskit
File "/Users/zhangc/.pyenv/versions/3.6.1/lib/python3.6/site-packages/atx/ioskit.py", line 199
print dev.screenshot('i.png')
^
SyntaxError: invalid syntax

语法错误,经过大神调试得知原来是,atx版本问题,升级atx版本。

复制代码
# 查看pip下各个库的版本
pip list

# 得知
atx (1.1.2.dev18)
pip (9.0.1)

# 升级pip
pip install --upgrade pip

# 升级atx
pip install -U atx

# 再查看pip下各个库版本
    Package       Version    
--------------- -----------  
     atx           1.2.0 
     pip           18.1  

# 最后再运行weditor
python -m weditor
复制代码

 

weditor终于启动成功!!!!!

浏览器自动打开weditor,选择IOS,输入地址:http://localhost:8100,点击【Connect】连接,出现小绿叶🍀表示连接成功,再点击蓝色按钮【Reload】刷新如下:

 

 至此facebook-wda安装以及元素定位讲解到此为止。

=======扩展=======

坐标点的获取:

 

三、附录:学习资料          返回目录

参考文章:

感谢:

codeskyblue 的《使用 Python 库 facebook-wda 完成网易云音乐 iOS 客户端的自动化测试 (示例)

wonderfei 的《基于Facebook-WDA的iOS-UI自动化测试

ReinhardHuang的:《由跳一跳外挂说起——初识 iOS 自动化测试框架 WebDriverAgent

后续facebook-wda自动化框架介绍请参照github上的地址:https://github.com/openatx/facebook-wda

  

posted @   Owen_ET  阅读(4642)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
  1. 1 イエスタデイ(翻自 Official髭男dism) 茶泡饭,春茶,kobasolo
  2. 2 模様 (TV size ver.) Ivy to Fraudulent Game
  3. 3 河口恭吾
  4. 4 愛してる 高鈴
  5. 5 一生所爱 卢冠廷,莫文蔚
  6. 6 世间美好与你环环相扣 柏松
  7. 7 理想三旬 陈鸿宇
  8. 8 不浪漫罪名 王杰
  9. 9 樱花树下 张敬轩
  10. 10 因为你在 达闻西乐队,福禄寿FloruitShow
  11. 11 悬溺 葛东琪
不浪漫罪名 - 王杰
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 陈少琪

作曲 : 王杰

没有花 这刹那被破坏吗

没有花 这刹那被破坏吗

无野火都会温暖吗

无烟花一起庆祝好吗

若爱恋 彷似戏剧那样假

若爱恋 彷似戏剧那样假

如布景一切都美化

连相拥都参照主角吗

你说我未能定时 令你每天欢笑一次

你说我未能定时 令你每天欢笑一次

我没说出一句美丽台词

是你心中一种缺陷定义

流进了眼角里的刺

为何不浪漫亦是罪名 为何不轰烈是件坏事情

为何不浪漫亦是罪名 为何不轰烈是件坏事情

从来未察觉我每个动作 没有声都有爱你的铁证

为何苦不浪漫亦是罪名 为何总等待着特别事情

从来未察觉我语气动听 在我呼吸声早已说明

甚么都会用一生保证

没有花 这刹那被破坏吗

没有花 这刹那被破坏吗

无野火都会温暖吗

无烟花一起庆祝好吗

若爱恋 彷似戏剧那样假

若爱恋 彷似戏剧那样假

如布景一切都美化

连相拥都参照主角吗

你说我未能定时 令你每天欢笑一次

你说我未能定时 令你每天欢笑一次

我没说出一句美丽台词

是你心中一种缺陷定义

流进了眼角里的刺

为何不浪漫亦是罪名 为何不轰烈是件坏事情

为何不浪漫亦是罪名 为何不轰烈是件坏事情

从来未察觉我每个动作 没有声都有爱你的铁证

为何苦不浪漫亦是罪名 为何总等待著特别事情

从来未察觉我语气动听 在我呼吸声早已说明

什么都会用一生保证

为何不浪漫亦是罪名 为何不轰烈是件坏事情

为何不浪漫亦是罪名 为何不轰烈是件坏事情

从来未察觉我每个动作 没有声都有爱你的铁证

为何苦不浪漫亦是罪名 为何总等待著特别事情

从来未察觉我语气动听 在我呼吸声早已说明

什么都会用一生保证

点击右上角即可分享
微信分享提示