wdapy介绍

项目地址

wdapy

背景

事实上这个库是facebook-wda项目的重写版,重写的原因主要如下:

  • facebook-wda在pypi上注册,但是pypi上还有一个wda项目,这个项目的代码很老,使用者经常会安装错
  • facebook-wda的初衷是为了方便使用facebook开发的WebDriverAgent。很遗憾,facebook自己先放弃了WebDriverAgent这个项目,但是许多人fork了这个项目,最有名的当属appium的版本,不过还有很多人fork了改进的,这样就不存在一个标准的wda库了。既要兼容这个,又要兼容那个,导致项目中的代码有很多补丁,不太美观
  • facebook-wda是从python2开始的,有很多type hint没有加入,导致自动补全的项目不太好
  • facebook-wda使用的人很多,但有些接口实在没有存在的必要,但删掉又会有很多麻烦,所以还不如直接重写

说完了重写的原因,那么这个wdapy有什么新特性呢

  • 发布到pypi的项目名和github的项目名一致,避免歧义
  • 支持多种版本的WebDriverAgent,所以会有很多的类包括AppiumClient,CodeskyblueClient。而这些类都继承自基类CommonClient,也可以重写一些方法
  • 每个函数都支持自动不全,不再是一个dict返回,函数的输入也使用enum进行处理
  • 将WDA启动接口暴露出来, 更加灵活地适配各种平台
  • 使用mock模块写单测。这样就能在travis之类的持续集成平台跑测试

简要说明

wdapy是一个专门用于提供iOS应用自动化测试的库,它通过直接构造HTTP请求与WebDriverAgent通信。通过Python代码,你能完成许多功能。Appium中你能找到的功能,这个库都有提供,找不到的这个库也有提供。

安装准备

1.首先你需要自己部署好WebDriverAgent 你可以参考这篇文章iOS 真机如何安装 WebDriverAgent

2.安装wdapy
Python3.7+
如果你希望运行单元测试,则需要Python3.8+

pip3 install wdapy

使用方法

Create a Client

import wdapy
c = wdapy.AppiumClient("http://localhost:8100")
# DEFAULT_WDA_URL = "http://localhost:8100"
# 所以你也可以直接
c = wdapy.AppiumClient()
# 或者
# c = wdapy.AppiumUSBClient()
# c = wdapy.NanoUSBClient()

Client

# Show ip
st = c.status()
print(st.ip)

# Press home button
c.homescreen()

# Get page source
c.sourcetree()

c.is_locked() # true or false
c.lock() # lock screen
c.unlock() # unlock
c.app_current() # {"pid": 1281, "bundleId": "com.netease.cloudmusic"}

# take a screenshot
c.screenshot().save("screenshot.jpg")
# or you can use this, which also takes a screenshot
c.press_duration(name="power_plus_home", duration=1)

c.app_current() # show current app info
c.app_list() # show app list
c.app_terminate("com.apple.Health") # terminate app
# 还有许多 这里不全部列举出来

测试

所有的测试代码都在tests目录下。调度框架pytest

参考