Appium
Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium对IOS系统的支持得益于Dan Cuellar’s对于IOS自动化的研究。Appium也集成了Selendroid,来支持老android版本。
使用Appium进行自动化测试有两个好处:
1. Appium在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。
2. Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架。如果只使用Apple的UIAutomation,我们只能用javascript来编写测试用例,而且只能用Instruction来运行测试用例。同样,如果只使用Google的UIAutomation,我们就只能用java来编写测试用例。Appium实现了真正的跨平台自动化测试。
1.直接下载appium.dmg 运行即可
2.使用node从命令行运行appium
下面我们主要讲解MAC下的appium环境搭建:
1.brew install node 想要生效首先必须先安装homebrew才行,所以第一步应当是检查自己是否已经安装homebrew
命令行中输入:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
查看版本brow -v
PC-0080:~ guokr$ brew -v
Homebrew 0.9.5
移除版本的话,在命令行中输入:
rm -rf /usr/local/Cellar /usr/local/.git && brew cleanup
2.在终端输入brew install node 命令安装node.js 安装完成后在终端输入node -v 命令检查是否安装成功,出现版本信息说明安装成功。
PC-0080:~ guokr$ node -v
v0.10.33
或者用另外一种安装方式:
git clone git://github.com/ry/node.git
cd node
./configure
make
sudo make install
3.在终端输入npm install -g appium,这里重点提一下,使用sudo安装appium能够安装,但是运行不起来,这里给出一个解决方案:
方法:
PC-0080:~ guokr$ sudo npm uninstall appium -g //卸载appium
unbuild [email protected]
PC-0080:~ guokr$ sudo chmod -R 777 /usr/local //权限就一刀切了。
PC-0080:~ guokr$ npm install -g appium //重新安装
4.安装appium client ,appium主站上给出的命令是npm install wd 这应该是老版本的安装方法。。
我去github上的appium分支下下载了python-client-master,然后在终端下进入该目录,输入python setup.py install 命令进行模块的安装。
git clone [email protected]:appium/python-client.git
cd python-client
python setup.py install
5. 启动appium
appium &
PC-0080:python-client guokr$ appium &
[1] 35465
PC-0080:python-client guokr$ info: Welcome to Appium v1.3.4 (REV c8c79a85fbd6870cd6fc3d66d038a115ebe22efe)
info: Appium REST http interface listener started on 0.0.0.0:4723
info: Console LogLevel: debug
6.appium提供了命令来检查appium的依赖是否安装
终端输入appium-doctor
结果如下:
PC-0080:~ guokr$ appium-doctor
Running iOS Checks
✔ Xcode is installed at /Applications/Xcode.app/Contents/Developer
✔ Xcode Command Line Tools are installed.
✔ DevToolsSecurity is enabled.
✔ The Authorization DB is set up properly.
✔ Node binary found at /usr/local/bin/node
✔ iOS Checks were successful.
Running Android Checks
✔ ANDROID_HOME is set to "/Users/guokr/Downloads/adt/sdk"
✖ JAVA_HOME is not set
由于我这次只需要执行一个ios测试用例,所以基础要保证ios依赖没有问题就可以了。
写到这里mac下的appium环境搭建已经全部完成了,下面让我们去运行人森中第一个测试用例吧,学习一个框架最好的办法,当然是直接运行appiunm提供的例子了,例子是从github上appium中下载的,点这里download zip去吧-—-。直接git clone遇到了文件权限问题。。。或者在这里直接下载ios 例子。
下载完成后,在终端进入 cd Downloads/samplecode-master/sample-code/apps/TestApp,目录下通过如下命令编译生成示例程序:xcodebuild -sdk iphonesimulator 当看到**BUILD SUCCEEDED**则说明编译成功
注意:这行命令在TestApp项目底下创建了一个build/Release-iphonesimulator目录,并且声称一个可以透过Appium服务器交流的.app封装包。
成功后在终端进入cd Downloads/samplecode-master/sample-code/examples/python目录下,然后在appium运行的情况下输入python ios_simple.py. 示例文件会执行两个用例,一个是侧滑效果,一个是计算求和。
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
Java -v 判断java是否安装成功
2. Git安装
3. Ruby安装
安装RF时已经安装了Ruby
4. brew
同样,安装RF时已经安装brew
5. Xcode
若要使用appium1.5.3版本,则Xcode版本要8以下
下载地址:https://developer.apple.com/downloads/
6. Android SDK
下载地址:https://developer.android.com/studio/index.html#downloads
选择:android-sdk_r24.4.1-macosx.zip(写本文时的最新版)解压缩到任意位置,比如/usr/local/android-sdk-macosx下。
运行/usr/local/android-sdk-macosx/tools/android,即可启动Android SDK Manager。
Accept License。然后Install就可以了。这个过程根据网速不同,可能需要10-20分钟,耐心等待。
7. 设置环境变量
vi ~/.bash_profile
export ANDROID_HOME=/usr/local/android-sdk-macosx
export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools
source ~/.bash_profile
brew install node
如果在这过程中无法安装node,也可以直接下载nodejs一步一步安装,再执行此条命令
2). appium
brew install -g appium@1.5.3
此处执行安装appium,若幸运,则中途不报错正常安装,然而这是很低很低很低的概率。查找若干文档后,发现可以替代这个命令的。但在说这个之前,,肯定在执行这条命令的时候报错了,,提示没有权限操作/usr/local/….云云,这个时候,需要给对应没权限的文件夹以执行权限。不能用sudo 命令安装,即便安装了,也无法正常使用appium。
chmod 777 /usr/local/**...
若是还不行,看一下是不是当前用户没有管理员的操作权限,对应报错的文件夹给予管理员权限,并根据提示做链接
chown -R USERNAME /User/USERNAME/***
当文件夹权限问题解决后,就是安装appium的时候了,,若有VPN则可直接访问国外网站使用上面命令安装appium,若没有VPN则使用万能的淘宝镜像来替代
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install -g appium@1.5.3 #get appium
3). client 安装
npm install wd #get appium client
4). appium server
appium & # start appium
至此 Appium安装完了。
5). appium-doctor启动
appium doctor 用来验证appium安装是否成功。在终端执行
npm install appium-doctor -g
输入appium-doctor检测环境是否成功。
6). appium-client安装
pip install appium-python-client
Appium使用
对于初学,安装好了以后仍然都是命令行的东西,,不知道如何使用,,,win下的appium都是有界面的啊,Mac下没界面的appium着实让我感觉无从下手的样子,不知道appium & 和appium-doctor有什么区别。目前的了解时appium & 是启动appium server。而appium-doctor 只是验证appium安装问题。appium-client才是在我们每次编辑项目时候要用到的appium。
1). 打开appiumserver
appium --session-override
连接真机后,执行这条语句,开启appium监视器,监听客户端,并打印log
2). 下载安装android包,获取APK名称
获取到要测试的android包,将它写到代码中如:android-v2.6.0-dev.apk
3). 安装android包
adb命令將android 包安装到测试机
4). 编写程序
from appium import webdriver
import time
from selenium.webdriver.common.by import By
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '6.0.1'
#android版本
desired_caps['deviceName'] = 'M4'#机器名称
desired_caps['app'] = '/Users/USERNAME/Downloads/android-v2.6.0-dev.apk'#APK路径
wd = webdriver.Remote('http://0.0.0.0:4723/wd/hub', desired_caps)
wd.implicitly_wait(60)
def is_alert_present(wd):
try:
wd.switch_to_alert().text
return True
except:
return False
try:
#print wd.page_source
time.sleep(10)
#for循环模拟手指滑动启示引导页
for i in range(5):
wd.swipe(start_x=1000, start_y=200, end_x=0, end_y=200)
wd.find_element_by_id('tutorial_page_open_speedx').click()
#锁定引导页上的某个button并点击
time.sleep(10)
# wd.find_elements_by_android_uiautomator('new UiSelector().resourceId("authentication_activity_form_switch")').click()
# wd.find_element_by_id('com.beastbikes.android:id/authentication_activity_form_switch').click()
# wd.find_elements_by_android_uiautomator('new UiSelector().clickable(true)')
#wd.find_element_by_xpath('//UIAStaticText[@name="Already have an account?"]').click()
#wd.find_element_by_xpat.h("//UIAApplication[1]/UIAWindow[1]/UIATableView[1]/UIATableCell[1]/UIATextField[1]").send_keys("15727388185")
# wd.find_element_by_xpath('//XCUIElementTypeTextField[@value="Phone / Email"]').send_keys("15727388185")
# wd.find_element_by_xpath('//XCUIElementTypeSecureTextField[@value="Please enter your password"]').send_keys("123456")
finally:
wd.quit()
不是我的APK代码肯定执行不通,pycharm上直接执行代码即可看到在监控的log
5). 使用uiautomatorviewer工具定位元素
android定位元素使用uiautomatorviewer工具定位元素,工具在androidSDK的tools下执行 ./uiautomatorviewer
或者在/usr/bin目录下执行 uiautomatorviewer