Appium环境的安装与配置,Python测试脚本测试

Appium自动化测试系列1 - Appium环境的安装与配置

发表于4个月前(2015-01-27 14:34)   阅读(803) | 评论(00人收藏此文章, 我要收藏

0

寻找 会’偷懒’的开发者线下公开课,报名即享受免费体验云主机

摘要 看了网上很多有关Appium的安装配置贴,都写得语焉不详,不清不楚,正好打算把自动化测试框架从Robotium切换到Appium, 顺手记录一下,给大家参考。转载请注明出处。

Appium 安装 配置 测试

之前一直使用Robotium做为Android App测试框架的底层基础,受限于跨进程,以及控件加载的一些限制,很多特殊场景无法覆盖,决定尝试久闻的Appium(它也差不多成熟了),顺便做个笔记,方便其他有同样需求的朋友。

先从安装说起吧,关于Appium的安装,网上的资料大多语焉不详,基本上你按照他们写的步骤,是不可能装的出一个完整的环境的。所以,为了把步骤 写得详细一点,自己从无到有反复试了几次,确保自己的安装步骤是完整的。(当然,安装方法其实有多种,这里只是其中的一种而已。) 这里以Python作为脚本开发语言为例:

1 安装并配置JDK,1.6或者1.7版均可,建议1.7,Java SDK的安装很简单,不详述了。(装JDK是因为后面Android SDK要依赖它)

2 安装Android SDK并配置环境变量(测试中用到Android SDK的一些工具)

1) 安装Android SDK  https://developer.android.com/sdk/installing/index.html?pkg=tools

2) 安装完毕后启动Android SDK Manger (SDK Manager.exe,在Android SDK的安装目录下),安装需要的Android Packages,比如一些工具,需要的Android版本, EABI(模拟器相关的包)等等

3) 添加环境变量Android_HOME, 值是Android SDK的安装路径; 并把Android SDK下的platform-tools路径和tools路径添加到环境变量Path (%ANDROID_HOME%\platform-tools; %ANDROID_HOME%\tools;)

3 安装Python开发环境并配置环境变量

1) 下载并安装Python2.7 https://www.python.org/ftp/python/2.7.9/python-2.7.9.msi

2)将Python2.7的安装路径(也就是python.exe所在的目录)添加到环境变量Path

4 安装Nodejs (Appium使用Node.js作为服务器引擎)

1) 下载并安装Node.js http://nodejs.org/dist/v0.10.35/node-v0.10.35-x86.msi

2) 把Node.js的安装路径(也就是node.exe文件所在的目录)添加到环境变量Path

5 安装Appium。

1) 打开CMD窗口,执行 npm install -g appium 命令开始安装Appium. Appium默认被安装到C:\Users\Administrator\AppData\Roaming\npm\ 下。

2) 把路径C:\Users\Administrator\AppData\Roaming\npm\ (appium可执行文件所在的目录)添加到环境变量Path

至此,Appium的环境就算搭建好了。打开CMD窗口,执行 appium 即可运行起来。默认侦端口为4723。运行状态如下图:

Appium自动化测试系列2- 写一个Python测试脚本来测试一下YY语音

发表于4个月前(2015-01-27 15:18)   阅读(1332) | 评论(07人收藏此文章, 我要收藏

0

寻找 会’偷懒’的开发者线下公开课,报名即享受免费体验云主机

摘要 以YY语音为被测对象,写一个最简单的Python脚本来测试它,熟悉Appium的测试过程。

Appium Python 测试 脚本 实践

我们在《Appium自动化测试系列1-Appium环境的安装和配置》里已经搭好了Appium的基本环境,这一章,我们就来真刀真枪使用一下Appium, 看看Appium是如果来实现自动化测试的。在写测试脚本之前,我们先安装几个必要的Python三方库。

1 安装Python的setuptools库 (因为安装Python的Selenium库需要用到它)

1) 下载setuptools文件并解压 https://pypi.python.org/pypi/setuptools/12.0.4#downloads

2) 打开CMD窗口,进入解压后的setuptools目录,执行命令python setup.py install 进行安装

?


1

D:\setuptools-12.0.4>python setup.py install

2 安装Python的Selenium库(Appium是采用WebDriver传输测试请求,利用Selenium的WebDriver功能)

1) 下载selenium文件并解压 https://pypi.python.org/pypi/selenium/2.44.0

2) 打开CMD窗口,进入解压后的selenium目录,执行命令python setup.py install 进行安装

?


1

D:\selenium-2.44.0>python setup.py install

3 下载Python的HTMLTestRunner.py,保存到Python安装路径的Lib目录下(如C:\Python27\Lib)。

下载地址 http://tungwaiyip.info/software/HTMLTestRunner.html

接下来,在你的Android手机上安装一个YY语音(我们以YY语音为例),然后把你的手机连接到电脑(建议采用Android4.x的手机),
执行命令adb devices 查看手机的deviceName,比如我的手机deviceName是 4d00b6a5bee8a047

?


1

2

3

D:\>adb devices

List of devices attached

4d00b6a5bee8a047        device

开始写测试脚本my_android_test.py(脚本里要配置正确deviceName,软件包和启动Activity):

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

#coding:utf-8

import os

import HTMLTestRunner

import unittest

from selenium import webdriver

# Returns abs path relative to this file and not cwd

PATH = lambda p: os.path.abspath(

    os.path.join(os.path.dirname(__file__), p)

)

class elementA(unittest.TestCase):

    def test_(self):  

        desired_caps = {}

        desired_caps[‘deviceName‘= ‘4d00b6a5bee8a047‘  #adb devices查到的设备名

        desired_caps[‘platformName‘= ‘Android‘

        desired_caps[‘platformVersion‘= ‘4.2‘

        desired_caps[‘appPackage‘= ‘com.duowan.mobile‘  #被测App的包名

        desired_caps[‘appActivity‘= ‘com.yy.mobile.ui.splash.SplashActivity‘ #启动时的Activity

        driver = webdriver.Remote(‘http://localhost:4723/wd/hub‘, desired_caps)

        el = driver.find_element_by_name(u"神曲")

        self.assertIsNotNone(el)

        el.click()     

        yueBang = driver.find_element_by_name(u"月榜")

        self.assertIsNotNone(yueBang)

        yueBang.click()    

        driver.quit()

    

if __name__ == ‘__main__‘:

    testunit=unittest.TestSuite()        #定义一个单元测试容器

    testunit.addTest(elementA("test_"))  #将测试用例加入到测试容器中    

    filename="./myAppiumLog.html"        #定义个报告存放路径,支持相对路径。

    fp=file(filename,‘wb‘)

    runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=‘Report_title‘,description=‘Report_description‘)  #使用HTMLTestRunner配置参数,输出报告路径、报告标题、描述

    runner.run(testunit)                 #自动进行测试

打开一个CMD窗口,启动Appium。 再打开一个CMD新窗口,执行命令 python my_android_test.py 执行测试脚本。

测试完成后,会在测试脚本的同目录下生成一个名为
myAppiumLog.html的Log文件(见脚本中相应的代码段)。同时,Appium运行窗口默认会打印整个测试过程的所有信息,如下所示:(整
个测试过程,Appium做了以下一些事:获取手机系统信息、启动UIAutomator、端口forward、启动手机上的Appium服务、执行控件
的操作如查找点击等等)

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

info: --> POST /wd/hub/session {"desiredCapabilities":{"platformVersion":"4.2","deviceName":"4d00b6a5bee8a047","platformName":"Android","appActivity":

"com.yy.mobile.ui.splash.SplashActivity","appPackage":"com.duowan.mobile"}}

info: Client User-Agent string: Python-urllib/2.7

info: [debug] Didn‘t get app but did get Android package, will attempt to launch it on the device

info: [debug] Creating new appium session 1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35

info: Starting android appium

info: [debug] Getting Java version

info: Java version is: 1.6.0_45

info: [debug] Using fast reset? true

info: [debug] Preparing device for session

info: [debug] Not checking whether app is present since we are assuming it‘s already on the device

info: [debug] Checking whether adb is present

info: [debug] Using adb from C:\Android\sdk\platform-tools\adb.exe

info: Retrieving device

info: [debug] Trying to find a connected android device

info: [debug] Getting connected devices...

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe devices

info: [debug] 2 device(s) connected

info: Found device 4d00b6a5bee8a047

info: [debug] Setting device id to 4d00b6a5bee8a047

info: [debug] Waiting for device to be ready and to respond to shell commands (timeout = 5)

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 wait-for-device

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 shell "echo ‘ready‘"

info: [debug] Starting logcat capture

warn: No app capability, can‘t parse package/activity

info: [debug] Getting device API level

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 shell "getprop ro.build.version.sdk"

info: [debug] Device is at API Level 19

info: Device API level is: 19

info: [debug] Apk doesn‘t exist locally

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 shell "rm -rf /data/local/tmp/strings.json"

info: [debug] Not uninstalling app since server not started with --full-reset

info: [debug] Skipping install since we launched with a package instead of an app path

info: [debug] Forwarding system:4724 to device:4724

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 forward tcp:4724 tcp:4724

info: [debug] Pushing appium bootstrap to device...

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 push "C:\\Users\\Administrator\\AppData\\Roaming\\npm\\node_mod

ules\\appium\\build\\android_bootstrap\\AppiumBootstrap.jar" /data/local/tmp/

info: [debug] Pushing settings apk to device...

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 install "C:\Users\Administrator\AppData\Roaming\npm\node_module

s\appium\build\settings_apk\settings_apk-debug.apk"

info: [debug] Pushing unlock helper app to device...

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 install "C:\Users\Administrator\AppData\Roaming\npm\node_module

s\appium\build\unlock_apk\unlock_apk-debug.apk"

info: Starting App

info: [debug] Attempting to kill all ‘uiautomator‘ processes

info: [debug] Getting all processes with ‘uiautomator‘

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 shell "ps ‘uiautomator‘"

info: [debug] No matching processes found

info: [debug] Running bootstrap

info: [debug] spawning: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 shell uiautomator runtest AppiumBootstrap.jar -c io.appium.android.b

ootstrap.Bootstrap

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: numtests=1

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: stream=

info: [debug] [UIAUTOMATOR STDOUT] io.appium.android.bootstrap.Bootstrap:

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: test=testRunServer

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: class=io.appium.android.bootstrap.Bootstrap

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: current=1

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS_CODE: 1

info: [debug] [BOOTSTRAP] [debug] Socket opened on port 4724

info: [debug] [BOOTSTRAP] [debug] Appium Socket Server Ready

info: [debug] [BOOTSTRAP] [debug] Loading json...

info: [debug] Waking up device if it‘s not alive

info: [debug] Pushing command to appium work queue: ["wake",{}]

info: [debug] [BOOTSTRAP] [debug] Registered crash watchers.

info: [debug] [BOOTSTRAP] [debug] Client connected

info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"wake","params":{}}

info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION

info: [debug] [BOOTSTRAP] [debug] Got command action: wake

info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":true,"status":0}

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 shell "dumpsys window"

info: [debug] Screen already unlocked, continuing.

info: [debug] Pushing command to appium work queue: ["getDataDir",{}]

info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"getDataDir","params":{}}

info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION

info: [debug] [BOOTSTRAP] [debug] Got command action: getDataDir

info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":"\/data\/local\/tmp","status":0}

info: [debug] dataDir set to: /data/local/tmp

info: [debug] Pushing command to appium work queue: ["compressedLayoutHierarchy",{"compressLayout":false}]

info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"compressedLayoutHierarchy","params":{"compressLayout":false}}

info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION

info: [debug] [BOOTSTRAP] [debug] Got command action: compressedLayoutHierarchy

info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":false,"status":0}

info: [debug] Getting device API level

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 shell "getprop ro.build.version.sdk"

info: [debug] Device is at API Level 19

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 shell "am start -S -a android.intent.action.MAIN -c android.int

ent.category.LAUNCHER -f 0x10200000 -n com.duowan.mobile/com.yy.mobile.ui.splash.SplashActivity"

info: [debug] Waiting for pkg "com.duowan.mobile" and activity "com.yy.mobile.ui.splash.SplashActivity" to be focused

info: [debug] Getting focused package and activity

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 shell "dumpsys window windows"

info: [debug] Device launched! Ready for commands

info: [debug] Setting command timeout to the default of 60 secs

info: [debug] Appium session started with sessionId 1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35

info: <-- POST /wd/hub/session 303 8377.855 ms - 9

info: --> GET /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35 {}

info: [debug] Responding to client with success: {"status":0,"value":{"platform":"LINUX","browserName":"Android","platformVersion":"4.2","webStorageEn

abled":false,"takesScreenshot":true,"javascriptEnabled":true,"databaseEnabled":false,"networkConnectionEnabled":true,"locationContextEnabled":false,"w

arnings":{},"desired":{"platformVersion":"4.2","deviceName":"4d00b6a5bee8a047","platformName":"Android","appActivity":"com.yy.mobile.ui.splash.SplashA

ctivity","appPackage":"com.duowan.mobile"},"deviceName":"4d00b6a5bee8a047","platformName":"Android","appActivity":"com.yy.mobile.ui.splash.SplashActiv

ity","appPackage":"com.duowan.mobile"},"sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35"}

info: <-- GET /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35 200 2.143 ms - 641 {"status":0,"value":{"platform":"LINUX","browserName":"Android",

"platformVersion":"4.2","webStorageEnabled":false,"takesScreenshot":true,"javascriptEnabled":true,"databaseEnabled":false,"networkConnectionEnabled":t

rue,"locationContextEnabled":false,"warnings":{},"desired":{"platformVersion":"4.2","deviceName":"4d00b6a5bee8a047","platformName":"Android","appActiv

ity":"com.yy.mobile.ui.splash.SplashActivity","appPackage":"com.duowan.mobile"},"deviceName":"4d00b6a5bee8a047","platformName":"Android","appActivity"

:"com.yy.mobile.ui.splash.SplashActivity","appPackage":"com.duowan.mobile"},"sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35"}

info: --> POST /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35/element {"using":"name","sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35","value"

:"神曲"}

info: [debug] Waiting up to 0ms for condition

info: [debug] Pushing command to appium work queue: ["find",{"strategy":"name","selector":"神曲","context":"","multiple":false}]

info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"find","params":{"strategy":"name","selector":"神曲","context":"","mu

ltiple":false}}

info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION

info: [debug] [BOOTSTRAP] [debug] Got command action: find

info: [debug] [BOOTSTRAP] [debug] Finding 神曲 using NAME with the contextId:  multiple: false

info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[DESCRIPTION=神曲, INSTANCE=0]

info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[TEXT=神曲, INSTANCE=0]

info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":{"ELEMENT":"1"},"status":0}

info: [debug] Responding to client with success: {"status":0,"value":{"ELEMENT":"1"},"sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35"}

info: <-- POST /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35/element 200 30359.695 ms - 87 {"status":0,"value":{"ELEMENT":"1"},"sessionId":"1b0

e4603-d4c8-44d7-868a-cd1c0d1f4b35"}

info: --> POST /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35/element/1/click {"sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35","id":"1"}

info: [debug] Pushing command to appium work queue: ["element:click",{"elementId":"1"}]

info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"element:click","params":{"elementId":"1"}}

info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION

info: [debug] [BOOTSTRAP] [debug] Got command action: click

info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":true,"status":0}

info: [debug] Responding to client with success: {"status":0,"value":true,"sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35"}

info: <-- POST /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35/element/1/click 200 3267.154 ms - 76 {"status":0,"value":true,"sessionId":"1b0e460

3-d4c8-44d7-868a-cd1c0d1f4b35"}

info: --> POST /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35/element {"using":"name","sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35","value"

:"站台"}

info: [debug] Waiting up to 0ms for condition

info: [debug] Pushing command to appium work queue: ["find",{"strategy":"name","selector":"站台","context":"","multiple":false}]

info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"find","params":{"strategy":"name","selector":"站台","context":"","mu

ltiple":false}}

info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION

info: [debug] [BOOTSTRAP] [debug] Got command action: find

info: [debug] [BOOTSTRAP] [debug] Finding 站台 using NAME with the contextId:  multiple: false

info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[DESCRIPTION=站台, INSTANCE=0]

info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[TEXT=站台, INSTANCE=0]

info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":"No element found","status":7}

info: [debug] Condition unmet after 190ms. Timing out.

info: [debug] Responding to client with error: {"status":7,"value":{"message":"An element could not be located on the page using the given search para

meters.","origValue":"No element found"},"sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35"}

info: <-- POST /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35/element 500 196.363 ms - 195

info: --> POST /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35/element {"using":"name","sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35","value"

:"月榜"}

info: [debug] Waiting up to 0ms for condition

info: [debug] Pushing command to appium work queue: ["find",{"strategy":"name","selector":"月榜","context":"","multiple":false}]

info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"find","params":{"strategy":"name","selector":"月榜","context":"","mu

ltiple":false}}

info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION

info: [debug] [BOOTSTRAP] [debug] Got command action: find

info: [debug] [BOOTSTRAP] [debug] Finding 月榜 using NAME with the contextId:  multiple: false

info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[DESCRIPTION=月榜, INSTANCE=0]

info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[TEXT=月榜, INSTANCE=0]

info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":{"ELEMENT":"2"},"status":0}

info: [debug] Responding to client with success: {"status":0,"value":{"ELEMENT":"2"},"sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35"}

info: <-- POST /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35/element 200 242.911 ms - 87 {"status":0,"value":{"ELEMENT":"2"},"sessionId":"1b0e4

603-d4c8-44d7-868a-cd1c0d1f4b35"}

info: --> POST /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35/element/2/click {"sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35","id":"2"}

info: [debug] Pushing command to appium work queue: ["element:click",{"elementId":"2"}]

info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"element:click","params":{"elementId":"2"}}

info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION

info: [debug] [BOOTSTRAP] [debug] Got command action: click

info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":true,"status":0}

info: [debug] Responding to client with success: {"status":0,"value":true,"sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35"}

info: <-- POST /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35/element/2/click 200 3377.934 ms - 76 {"status":0,"value":true,"sessionId":"1b0e460

3-d4c8-44d7-868a-cd1c0d1f4b35"}

info: --> POST /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35/element {"using":"name","sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35","value"

:"站台"}

info: [debug] Waiting up to 0ms for condition

info: [debug] Pushing command to appium work queue: ["find",{"strategy":"name","selector":"站台","context":"","multiple":false}]

info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"find","params":{"strategy":"name","selector":"站台","context":"","mu

ltiple":false}}

info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION

info: [debug] [BOOTSTRAP] [debug] Got command action: find

info: [debug] [BOOTSTRAP] [debug] Finding 站台 using NAME with the contextId:  multiple: false

info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[DESCRIPTION=站台, INSTANCE=0]

info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[TEXT=站台, INSTANCE=0]

info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":{"ELEMENT":"3"},"status":0}

info: [debug] Responding to client with success: {"status":0,"value":{"ELEMENT":"3"},"sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35"}

info: <-- POST /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35/element 200 630.792 ms - 87 {"status":0,"value":{"ELEMENT":"3"},"sessionId":"1b0e4

603-d4c8-44d7-868a-cd1c0d1f4b35"}

info: --> DELETE /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35 {}

info: Shutting down appium session

info: [debug] Pressing the HOME button

info: [debug] executing cmd: C:\Android\sdk\platform-tools\adb.exe -s 4d00b6a5bee8a047 shell "input keyevent 3"

info: [debug] Stopping logcat capture

info: [debug] Logcat terminated with code null, signal SIGTERM

info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"shutdown"}

info: [debug] [BOOTSTRAP] [debug] Got command of type SHUTDOWN

info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":"OK, shutting down","status":0}

info: [debug] [BOOTSTRAP] [debug] Closed client connection

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: numtests=1

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: stream=.

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: test=testRunServer

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: class=io.appium.android.bootstrap.Bootstrap

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: current=1

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS_CODE: 0

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS: stream=

info: [debug] [UIAUTOMATOR STDOUT] Test results for WatcherResultPrinter=.

info: [debug] [UIAUTOMATOR STDOUT] Time: 41.607

info: [debug] [UIAUTOMATOR STDOUT] OK (1 test)

info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS_CODE: -1

info: [debug] Sent shutdown command, waiting for UiAutomator to stop...

info: [debug] UiAutomator shut down normally

info: [debug] Cleaning up android objects

info: [debug] Cleaning up appium session

info: [debug] Responding to client with success: {"status":0,"value":null,"sessionId":"1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35"}

info: <-- DELETE /wd/hub/session/1b0e4603-d4c8-44d7-868a-cd1c0d1f4b35 200 1333.091 ms - 76 {"status":0,"value":null,"sessionId":"1b0e4603-d4c8-44d7-86

8a-cd1c0d1f4b35"}

有任何问题,欢迎大家指正。

至于网上说的还要安装Ant和Maven,其实不必,除非你的代码和库管理需要用到他们。

接下来我们将以手机YY为例,写一个简单的Python测试脚本,来看看Appium到底怎么使用。

时间: 2024-10-08 20:27:09

Appium环境的安装与配置,Python测试脚本测试的相关文章

Mahout学习之Mahout简介、安装、配置、入门程序测试

一.Mahout简介 查了Mahout的中文意思--驭象的人,再看看Mahout的logo,好吧,想和小黄象happy地玩耍,得顺便陪陪这位驭象人耍耍了... 附logo: (就是他,骑在象头上的那个Mahout) 步入正文啦: Mahout 是一个很强大的数据挖掘工具,是一个分布式机器学习算法的集合,包括:被称为Taste的分布式协同过滤的实现.分类.聚类等.Mahout最大的优点就是基于hadoop实现,把很多以前运行于单机上的算法,转化为了MapReduce模式,这样大大提升了算法可处理的

(四)mac安装与配置 python的IDE

mac上安装一个python的IDE,方便进行py脚本编写: 建议安装 pycharm 社区版,免费,功能基本够用了. 下载地址:https://www.jetbrains.com/pycharm/download/#  (下载os x版,community版,免费) 打开pycharm,配置上python PYcharm>Perferences>Project untitled>Project Interpreter,选择系统对应的 python安装目录即可,下框中会对应地显示安装上的

Kubernetes二进制方式v1.13.2生产环境的安装与配置(HTTPS+RBAC) ?

Kubernetes二进制方式v1.13.2生产环境的安装与配置(HTTPS+RBAC) 一 背景 由于众所周知的原因,在国内无法直接访问Google的服务.二进制包由于其下载方便.灵活定制而深受广大kubernetes使用者喜爱,成为企业部署生产环境比较流行的方式之一,Kubernetes v1.13.2是目前的最新版本.安装部署过程可能比较复杂.繁琐,因此在安装过程中尽可能将操作步骤脚本话.文中涉及到的脚本已经通过本人测试. 二 环境及架构图 2.1 软件环境 OS(最小化安装版): cat

【CI】系列二:Ubuntu环境虚拟机安装及配置

好了,做好了初步计划之后,如果可行性没问题,就可以开始实践了. 准备前提:VirtualBox.ubunut镜像 如果没有,可以通过如下地址下载,安装过程此处不做描述. VirtualBox 4.3.12 for Windows hosts:http://download.virtualbox.org/virtualbox/4.3.12/VirtualBox-4.3.12-93733-Win.exe ubuntu-14.04-desktop-amd64.iso:http://mirrors.hu

实验 1 Java 运行环境的安装、配置与运行

一.实验目的     1. 掌握下载 Java SDK 软件包.     2. 掌握设置 Java 程序运行环境的方法.     3. 掌握编写与运行 Java 程序的方法.     4. 了解 Java 语言的概貌. 5. 安装.掌握JCreator软件,为学习 Java 语言和进行 Java 程序的实验做好准备工作. 6. 浏览Applet 程序 二.实验要求     1. 安装并设置 Java SDK 软件包.     2. 编写一个简单的 Java 程序,在屏幕上输出"hello,jav

Java环境的安装与配置

Java环境的安装与配置 环境:Java8,win10 推荐oracle官网oracle官网https://www.oracle.com/index.html下载JDK进行安装 选择自己需要的版本下载 3.打开安装包,完成安装 打开我的电脑-->属性-->高级系统设置-->环境变量 新建修改环境 变量名:PATH 变量值:C:\Program Files\Java\jdk1.8.0_111\bin (JDK安装的bin目录路径) 变量名:JAVA_HOME 变量值:C:\Program

【读书笔记《C# 开发实战1200例》】1.1 Visual Studio 开发环境的安装和配置

001.Visual Studio 开发环境安装与配置 1. “工具” - “导入和导出设置” 2.选中“重置所有设置” 3.选中“否,仅重置设置,从而覆盖我的当前设置” 4.在此界面根据实际情况选中适合自己的开发环境设置 002.设置程序代码的行号 1.菜单项“工具”/“选项”命令 2.选择“文本编辑器”节点下的“所有语言选项”,在右侧选中“行号” 003.使开发环境全屏显示 1.菜单栏“视图”/“全屏显示”命令,或者直接按 Shift + Alt + Enter 键即可. 004.根据需要创

Ubuntu16.04下LAMP环境的安装与配置

Ubuntu16.04下LAMP环境的安装与配置 最近做个实验需要用到Ubuntu环境的靶场,所以这里介绍下Ubuntu环境下LAMP的安装与配置,话不多说,我们gkd! 1.Apache2的安装 首先确保机器已经进行了sudo apt-get update && sudo apt-get upgrade,如果速度慢请换源,这里我使用的是清华源. sudo apt-get install apache2,安装信息省略,一般安装结束之后apache会自动开启. systemctl statu

Python之Eclipse环境下安装与配置

奔着对python的好奇,今天又是周末,欲小试Python.那么首先避不开的问题就是python的环境搭建.而我之前已经在学习Java的过程中安装了Eclipse,不想再安装更多的IDE了,就那Eclipse来做IDE吧. 一.安装Python解释器  由于python目前最新的版本是3.6.2,我也不想下载2.x版本的去入坑拉,直接下载最新版本.哈哈. 链接:https://www.python.org/downloads/ 配置好环境变量后,打开cmd:python 效果图: 二.安装Ecl