Appium(二):第一条测试脚本_appium 第一条测试-程序员宅基地

技术标签: 杂七杂八的小技巧  Appium用例  测试框架  Appium第一条脚本  Appium测试  Android测试  Python学习  appium测试框架  

Appium(一):环境搭建上一篇博文中已经搭建好了整个appium的运行环境,接下来就是需要写一条自动化的测试脚本。

我们需要配置Appium应用程序:

1、手机连接PC,开启USB调试,从cmd窗口中输入adb deivces 来获取当前连接设备的deviceID

2、双击打开PC端桌面Appium图标,进入Appium界面。点击Android机器人图标,设置对应的值,

3、点击设置图标,勾选Override Existing Session。(这一步的目的是为了在多次调试时,每次调试完成后,二次调试调起的Session将覆盖上一次调试的Session)

4、配置为完成后,点击启动按钮,启动完成后,如下图

我这里,随便载了个百度的app,我们就自动化实现这样一条脚本:打开百度app--点击"同意并继续"按钮--点击搜索框--输入“demo”--点击“百度一下”进行搜索

因为在脚本中我们需要提供app的一些数据,让脚本可以调用,所以我们先要获取百度app(被测apk)的一些数据。在这里,我们可以使用aapt.exe来对apk进行解析并获取数据。这个工具由Android SDK提供。详细的目录:..\sdk-tools\platform-tools>C:\DEV\AndroidStudio-sdk-tools\build-tools\28.0.2\aapt.exe  辣么,这个工具可以为我们提供脚本中需要的Activity值和package值(包名)。只需要在cmd窗口中键入命令:C:\DEV\AndroidStudio-sdk-tools\build-tools\28.0.2\aapt.exe dump badging  D:\Process\BaiDu.apk  就可以看到CMD命令窗口中弹出了很多信息。为方便查看,这里将命令返回值重定向到D:\baiduAppDate.txt。也就是命令 C:\DEV\AndroidStudio-sdk-tools\build-tools\28.0.2\aapt.exe dump badging  D:\Process\BaiDu.apk > d:\baiduAppDate.txt 用Notepad++等编辑器打开查看,定位到包名和Activity名,取出这两个值。

接下来,在pyCharm工具中(其他IDE也可)创建一个py文件。根据之前设定要的用例步骤,键入代码:

# coding:utf-8
import os
import time
from appium import webdriver

PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p)) # 固定的写法

desired_caps = {
    'platformName': 'Android',  # 声明测试对象为Android平台
    'deviceName': 'K51LHP1782600106',  # deviceID 取自adb devices cmd命令行返回值
    'platformVersion': '6.0',  # 平台版本,与之前Appium程序中设置一致
    'app': PATH(r'D:\Process\BaiDu.apk'),  # 待测app目录地址
    'appPackage': 'com.baidu.searchbox',  # 待测app的包名
    'appActivity': 'com.baidu.searchbox.SplashActivity',  # 待测app的Activity名称
    # 'resetKeyboard': 'True'   # 用于设定运行完成后是否重置软键盘状态
}

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)  # 实例化driver
time.sleep(5)  # 等待5秒
# 点击“同意并继续”按钮
driver.find_element_by_name("同意并继续").click()  # 根据text进行定位后点击
time.sleep(5)
# 点击搜索框
driver.find_element_by_id("com.baidu.searchbox:id/baidu_searchbox").click()  # 根据resourceID进行定位后点击
time.sleep(2)
# 点击输入框
driver.find_element_by_id("com.baidu.searchbox:id/SearchTextInput").click()  # 根据resourceID进行定位后点击
time.sleep(1)
# 在输入框中键入“demo”
driver.find_element_by_id("com.baidu.searchbox:id/SearchTextInput").send_keys('demo')  # 根据resourceID进行定位后输入
time.sleep(3)
# 点击"百度一下"按钮
driver.find_element_by_name("百度一下").click()  # 根据text进行定位后点击

需要说明的是,如果待测app的PATH没有在脚本中写明的话,也可以直接在appium程序中设定。如下图:

OK,接下来就是运行了。(需要说明的是,在运行时,Appium曾经卡住了,从PC端的appium中的log看,卡在了ps uiautomator这个步骤,需要修改adb.js这个文件,详细的解决方案,可以借鉴网上大神们的博客。解决方案地址:https://www.cnblogs.com/syw20170419/p/7994482.html)

在PyCharm工具中,直接运行刚写的脚本。观察手机端的运行响应,同时查看PC端Appium工具中弹出的日志。

在PC端Appium工具中弹出了日志,日志有点多,如果我们详细一行行的看日志的话,我们可以看到调起测试后,Appium所做的一切事情,包括获取java、调用adb、连接设备,起服务,调用aapt.exe去分析待测app、安装app,最后调起测试等等等。

> Launching Appium server with command: C:\DEV\Appium\node.exe lib\server\main.js --address 127.0.0.1 --port 4723 --session-override --platform-name Android --platform-version 23 --automation-name Appium --device-name "K51LHP1782600106" --log-no-color
> info: Welcome to Appium v1.4.16 (REV ae6877eff263066b26328d457bd285c0cc62430d)
> info: Appium REST http interface listener started on 127.0.0.1:4723
> info: [debug] Non-default server args: {"address":"127.0.0.1","sessionOverride":true,"logNoColors":true,"deviceName":"K51LHP1782600106","platformName":"Android","platformVersion":"23","automationName":"Appium"}
> info: Console LogLevel: debug
> info: --> POST /wd/hub/session {"capabilities":{"firstMatch":[{"appium:appActivity":"com.baidu.searchbox.SplashActivity","appium:app":"D:\\Process\\BaiDu.apk","appium:deviceName":"K51LHP1782600106","appium:platformVersion":"6.0","appium:appPackage":"com.baidu.searchbox","platformName":"Android"}]},"desiredCapabilities":{"deviceName":"K51LHP1782600106","app":"D:\\Process\\BaiDu.apk","platformVersion":"6.0","appPackage":"com.baidu.searchbox","platformName":"Android","appActivity":"com.baidu.searchbox.SplashActivity"}}
> info: Client User-Agent string: selenium/3.141.0 (python windows)
> info: [debug] Using local app from desired caps: D:\Process\BaiDu.apk
> info: [debug] Creating new appium session 7cd626ca-ac3a-47ac-8b57-1ad0bec3a124
> info: Starting android appium
> info: [debug] Getting Java version
> info: Java version is: 1.7.0_51
> info: [debug] Checking whether adb is present
> info: [debug] Using adb from C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe
> info: [debug] Using fast reset? true
> info: [debug] Preparing device for session
> info: [debug] Checking whether app is actually present
> info: Retrieving device
> info: [debug] Trying to find a connected android device
> info: [debug] Getting connected devices...
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe devices
> info: [debug] 1 device(s) connected
> info: Found device K51LHP1782600106
> info: [debug] Setting device id to K51LHP1782600106
> info: [debug] Waiting for device to be ready and to respond to shell commands (timeout = 5)
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 wait-for-device
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "echo 'ready'"
> info: [debug] Starting logcat capture
> info: [debug] Getting device API level
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "getprop ro.build.version.sdk"
> info: [debug] Device is at API Level 25
> info: Device API level is: 25
> info: [debug] Extracting strings for language: default
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "getprop persist.sys.language"
> info: [debug] Current device persist.sys.language: 
> info: [debug] java -jar "C:\DEV\Appium\node_modules\appium\node_modules\appium-adb\jars\appium_apk_tools.jar" "stringsFromApk" "D:\Process\BaiDu.apk" "C:\Users\meitu\AppData\Local\Temp\com.baidu.searchbox" 
> info: [debug] Reading strings from converted strings.json
> info: [debug] Setting language to default
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 push "C:\\Users\\meitu\\AppData\\Local\\Temp\\com.baidu.searchbox\\strings.json" /data/local/tmp
> info: [debug] Checking whether aapt is present
> info: [debug] Using aapt from C:\DEV\AndroidStudio-sdk-tools\build-tools\28.0.2\aapt.exe
> info: [debug] Retrieving process from manifest.
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\build-tools\28.0.2\aapt.exe dump xmltree D:\Process\BaiDu.apk AndroidManifest.xml
> info: [debug] Set app process to: com.baidu.searchbox
> info: [debug] Not uninstalling app since server not started with --full-reset
> info: [debug] Checking app cert for D:\Process\BaiDu.apk.
> info: [debug] executing cmd: java -jar C:\DEV\Appium\node_modules\appium\node_modules\appium-adb\jars\verify.jar D:\Process\BaiDu.apk
> info: [debug] App already signed.
> info: [debug] Zip-aligning D:\Process\BaiDu.apk
> info: [debug] Checking whether zipalign is present
> info: [debug] Using zipalign from C:\DEV\AndroidStudio-sdk-tools\build-tools\28.0.2\zipalign.exe
> info: [debug] Zip-aligning apk.
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\build-tools\28.0.2\zipalign.exe -f 4 D:\Process\BaiDu.apk C:\Users\meitu\AppData\Local\Temp\119010-972-8js6z2\appium.tmp
> info: [debug] MD5 for app is 1a7cafa9c33f17f4786a7800ca69ab31
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "ls /data/local/tmp/1a7cafa9c33f17f4786a7800ca69ab31.apk"
> info: [debug] Getting install status for com.baidu.searchbox
> info: [debug] Getting device API level
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "getprop ro.build.version.sdk"
> info: [debug] Device is at API Level 25
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "pm list packages -3 com.baidu.searchbox"
> info: [debug] App is not installed
> info: Installing App
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "mkdir -p /data/local/tmp/"
> info: [debug] Removing any old apks
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "ls /data/local/tmp/*.apk"
> info: [debug] Found an apk we want to keep at /data/local/tmp/1a7cafa9c33f17f4786a7800ca69ab31.apk
> info: [debug] Couldn't find any apks to remove
> info: [debug] Uninstalling com.baidu.searchbox
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "am force-stop com.baidu.searchbox"
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 uninstall com.baidu.searchbox
> info: [debug] App was not uninstalled, maybe it wasn't on device?
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "pm install -r /data/local/tmp/1a7cafa9c33f17f4786a7800ca69ab31.apk"
> info: [debug] Forwarding system:4724 to device:4724
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 forward tcp:4724 tcp:4724
> info: [debug] Pushing appium bootstrap to device...
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 push "C:\\DEV\\Appium\\node_modules\\appium\\build\\android_bootstrap\\AppiumBootstrap.jar" /data/local/tmp/
> info: [debug] Pushing settings apk to device...
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 install "C:\DEV\Appium\node_modules\appium\build\settings_apk\settings_apk-debug.apk"
> info: [debug] Pushing unlock helper app to device...
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 install "C:\DEV\Appium\node_modules\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:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "ps"| grep uiautomator
> info: [debug] No matching processes found
> info: [debug] Running bootstrap
> info: [debug] spawning: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell uiautomator runtest AppiumBootstrap.jar -c io.appium.android.bootstrap.Bootstrap -e pkg com.baidu.searchbox -e disableAndroidWatchers false
> info: [debug] [UIAUTOMATOR STDOUT] Warning: This version of UI Automator is deprecated. New tests should be written using
> info: [debug] [UIAUTOMATOR STDOUT] UI Automator 2.0 which is available as part of the Android Testing Support Library.
> info: [debug] [UIAUTOMATOR STDOUT] See https://developer.android.com/training/testing/ui-testing/uiautomator-testing.html
> info: [debug] [UIAUTOMATOR STDOUT] for more details.
> 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] json loading complete.
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "dumpsys window"
> 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: {"status":0,"value":true}
> 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: {"status":0,"value":"\/data\/local\/tmp"}
> 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: {"status":0,"value":false}
> info: [debug] Getting device API level
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "getprop ro.build.version.sdk"
> info: [debug] Device is at API Level 25
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "am start -S -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -f 0x10200000 -n com.baidu.searchbox/com.baidu.searchbox.SplashActivity"
> info: [debug] Waiting for pkg "com.baidu.searchbox" and activity "com.baidu.searchbox.SplashActivity" to be focused
> info: [debug] Getting focused package and activity
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "dumpsys window windows"
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 shell "getprop ro.build.version.release"
> info: [debug] Device is at release version 7.1.1
> 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 7cd626ca-ac3a-47ac-8b57-1ad0bec3a124
> info: <-- POST /wd/hub/session 303 37250.642 ms - 74 
> info: --> GET /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124 {"capabilities":{"firstMatch":[{"appium:appActivity":"com.baidu.searchbox.SplashActivity","appium:app":"D:\\Process\\BaiDu.apk","appium:deviceName":"K51LHP1782600106","appium:platformVersion":"6.0","appium:appPackage":"com.baidu.searchbox","platformName":"Android"}]},"desiredCapabilities":{"deviceName":"K51LHP1782600106","app":"D:\\Process\\BaiDu.apk","platformVersion":"6.0","appPackage":"com.baidu.searchbox","platformName":"Android","appActivity":"com.baidu.searchbox.SplashActivity"}}
> info: [debug] Responding to client with success: {"status":0,"value":{"platform":"LINUX","browserName":"Android","platformVersion":"7.1.1","webStorageEnabled":false,"takesScreenshot":true,"javascriptEnabled":true,"databaseEnabled":false,"networkConnectionEnabled":true,"locationContextEnabled":false,"warnings":{},"desired":{"deviceName":"K51LHP1782600106","app":"D:\\Process\\BaiDu.apk","platformVersion":"6.0","appPackage":"com.baidu.searchbox","platformName":"Android","appActivity":"com.baidu.searchbox.SplashActivity"},"deviceName":"K51LHP1782600106","app":"D:\\Process\\BaiDu.apk","appPackage":"com.baidu.searchbox","platformName":"Android","appActivity":"com.baidu.searchbox.SplashActivity"},"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: <-- GET /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124 200 6.718 ms - 701 {"status":0,"value":{"platform":"LINUX","browserName":"Android","platformVersion":"7.1.1","webStorageEnabled":false,"takesScreenshot":true,"javascriptEnabled":true,"databaseEnabled":false,"networkConnectionEnabled":true,"locationContextEnabled":false,"warnings":{},"desired":{"deviceName":"K51LHP1782600106","app":"D:\\Process\\BaiDu.apk","platformVersion":"6.0","appPackage":"com.baidu.searchbox","platformName":"Android","appActivity":"com.baidu.searchbox.SplashActivity"},"deviceName":"K51LHP1782600106","app":"D:\\Process\\BaiDu.apk","appPackage":"com.baidu.searchbox","platformName":"Android","appActivity":"com.baidu.searchbox.SplashActivity"},"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: --> POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element {"using":"name","sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124","value":"鍚屾剰骞剁户缁?}
> warn: [DEPRECATED] The name locator strategy has been deprecated and will be removed.  Please use the accessibility id locator strategy instead.
> 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":"","multiple":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] Responding to client with success: {"status":0,"value":{"ELEMENT":"1"},"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: <-- POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element 200 68.470 ms - 87 {"status":0,"value":{"ELEMENT":"1"},"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: --> POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element/1/click {"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124","id":"1"}
> info: [debug] Pushing command to appium work queue: ["element:click",{"elementId":"1"}]
> info: [debug] [BOOTSTRAP] [debug] Returning result: {"status":0,"value":{"ELEMENT":"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: {"status":0,"value":true}
> info: [debug] Responding to client with success: {"status":0,"value":true,"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: <-- POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element/1/click 200 2325.161 ms - 76 {"status":0,"value":true,"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: --> POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element {"using":"id","sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124","value":"com.baidu.searchbox:id/baidu_searchbox"}
> info: [debug] Waiting up to 0ms for condition
> info: [debug] Pushing command to appium work queue: ["find",{"strategy":"id","selector":"com.baidu.searchbox:id/baidu_searchbox","context":"","multiple":false}]
> info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"find","params":{"strategy":"id","selector":"com.baidu.searchbox:id/baidu_searchbox","context":"","multiple":false}}
> info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION
> info: [debug] [BOOTSTRAP] [debug] Got command action: find
> info: [debug] [BOOTSTRAP] [debug] Finding com.baidu.searchbox:id/baidu_searchbox using ID with the contextId:  multiple: false
> info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[INSTANCE=0, RESOURCE_ID=com.baidu.searchbox:id/baidu_searchbox]
> info: [debug] Responding to client with success: {"status":0,"value":{"ELEMENT":"2"},"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: <-- POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element 200 54.301 ms - 87 {"status":0,"value":{"ELEMENT":"2"},"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: [debug] [BOOTSTRAP] [debug] Returning result: {"status":0,"value":{"ELEMENT":"2"}}
> info: --> POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element/2/click {"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124","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: {"status":0,"value":true}
> info: [debug] Responding to client with success: {"status":0,"value":true,"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: <-- POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element/2/click 200 596.189 ms - 76 {"status":0,"value":true,"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: --> POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element {"using":"id","sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124","value":"com.baidu.searchbox:id/SearchTextInput"}
> info: [debug] Waiting up to 0ms for condition
> info: [debug] Pushing command to appium work queue: ["find",{"strategy":"id","selector":"com.baidu.searchbox:id/SearchTextInput","context":"","multiple":false}]
> info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"find","params":{"strategy":"id","selector":"com.baidu.searchbox:id/SearchTextInput","context":"","multiple":false}}
> info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION
> info: [debug] [BOOTSTRAP] [debug] Got command action: find
> info: [debug] [BOOTSTRAP] [debug] Finding com.baidu.searchbox:id/SearchTextInput using ID with the contextId:  multiple: false
> info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[INSTANCE=0, RESOURCE_ID=com.baidu.searchbox:id/SearchTextInput]
> info: [debug] [BOOTSTRAP] [debug] Returning result: {"status":0,"value":{"ELEMENT":"3"}}
> info: [debug] Responding to client with success: {"status":0,"value":{"ELEMENT":"3"},"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: <-- POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element 200 720.191 ms - 87 {"status":0,"value":{"ELEMENT":"3"},"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: --> POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element/3/click {"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124","id":"3"}
> info: [debug] Pushing command to appium work queue: ["element:click",{"elementId":"3"}]
> info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"element:click","params":{"elementId":"3"}}
> info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION
> info: [debug] [BOOTSTRAP] [debug] Got command action: click
> info: [debug] [BOOTSTRAP] [debug] Returning result: {"status":0,"value":true}
> info: [debug] Responding to client with success: {"status":0,"value":true,"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: <-- POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element/3/click 200 936.165 ms - 76 {"status":0,"value":true,"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: --> POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element {"using":"id","sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124","value":"com.baidu.searchbox:id/SearchTextInput"}
> info: [debug] Waiting up to 0ms for condition
> info: [debug] Pushing command to appium work queue: ["find",{"strategy":"id","selector":"com.baidu.searchbox:id/SearchTextInput","context":"","multiple":false}]
> info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"find","params":{"strategy":"id","selector":"com.baidu.searchbox:id/SearchTextInput","context":"","multiple":false}}
> info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION
> info: [debug] [BOOTSTRAP] [debug] Got command action: find
> info: [debug] [BOOTSTRAP] [debug] Finding com.baidu.searchbox:id/SearchTextInput using ID with the contextId:  multiple: false
> info: [debug] [BOOTSTRAP] [debug] Using: UiSelector[INSTANCE=0, RESOURCE_ID=com.baidu.searchbox:id/SearchTextInput]
> info: [debug] [BOOTSTRAP] [debug] Returning result: {"status":0,"value":{"ELEMENT":"4"}}
> info: [debug] Responding to client with success: {"status":0,"value":{"ELEMENT":"4"},"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: <-- POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element 200 50.852 ms - 87 {"status":0,"value":{"ELEMENT":"4"},"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: --> POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element/4/value {"text":"demo","sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124","id":"4","value":["d","e","m","o"]}
> info: [debug] Pushing command to appium work queue: ["element:setText",{"elementId":"4","text":"demo","replace":false}]
> info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"element:setText","params":{"elementId":"4","text":"demo","replace":false}}
> info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION
> info: [debug] [BOOTSTRAP] [debug] Got command action: setText
> info: [debug] [BOOTSTRAP] [debug] Using element passed in.
> info: [debug] [BOOTSTRAP] [debug] Attempting to clear using UiObject.clearText().
> info: [debug] [BOOTSTRAP] [debug] Text remains after clearing, but it appears to be hint text.
> info: [debug] [BOOTSTRAP] [debug] Text not cleared. Assuming remainder is hint text.
> info: [debug] [BOOTSTRAP] [debug] Sending plain text to element: demo
> info: [debug] [BOOTSTRAP] [debug] Returning result: {"status":0,"value":true}
> info: [debug] Responding to client with success: {"status":0,"value":true,"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: <-- POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element/4/value 200 5589.128 ms - 76 {"status":0,"value":true,"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: --> POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element {"using":"name","sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124","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":"","multiple":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: {"status":0,"value":{"ELEMENT":"5"}}
> info: [debug] Responding to client with success: {"status":0,"value":{"ELEMENT":"5"},"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: <-- POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element 200 246.279 ms - 87 {"status":0,"value":{"ELEMENT":"5"},"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: --> POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element/5/click {"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124","id":"5"}
> info: [debug] Pushing command to appium work queue: ["element:click",{"elementId":"5"}]
> info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action":"element:click","params":{"elementId":"5"}}
> info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION
> info: [debug] [BOOTSTRAP] [debug] Got command action: click
> info: [debug] Responding to client with success: {"status":0,"value":true,"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: <-- POST /wd/hub/session/7cd626ca-ac3a-47ac-8b57-1ad0bec3a124/element/5/click 200 409.808 ms - 76 {"status":0,"value":true,"sessionId":"7cd626ca-ac3a-47ac-8b57-1ad0bec3a124"}
> info: [debug] [BOOTSTRAP] [debug] Returning result: {"status":0,"value":true}
> info: [debug] Didn't get a new command in 60 secs, shutting down...
> info: Shutting down appium session
> info: [debug] Pressing the HOME button
> info: [debug] executing cmd: C:\DEV\AndroidStudio-sdk-tools\platform-tools\adb.exe -s K51LHP1782600106 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] Sent shutdown command, waiting for UiAutomator to stop...
> info: [debug] [BOOTSTRAP] [debug] Returning result: {"status":0,"value":"OK, shutting down"}
> info: [debug] [UIAUTOMATOR STDOUT] close [socket][::/:::4724]
> 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: 89.374
> info: [debug] [UIAUTOMATOR STDOUT] OK (1 test)
> info: [debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS_CODE: -1
> info: [debug] UiAutomator shut down normally
> info: [debug] Cleaning up android objects
> info: [debug] Cleaning up appium session
> info: [debug] We shut down because no new commands came in

在手机端,我们来看下手机端的界面操作:

 

 

 

OK,Appium第一条脚本的编写和运行,到此处结束啦,后续将持续更新。。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hzk594512323/article/details/86217047

智能推荐

CentOS系统安装VNC详细步骤_centos如何用vnc-程序员宅基地

文章浏览阅读2k次。下面是总结的详细配置步骤,分享给大家。一、VNC远程控制CentOS系统1、查看CentOS系统中是否有安装vnc(默认安装)输入命令:rpm -q vnc vnc-server如果显示结果为:package vnc is not installedvnc-server-4.1.2-14.e15_3.1说明你机器上已经安装了vnc。如果没有,可以在centOS的软件_centos如何用vnc

datax的使用以及参数解释,快速入门版_datax 参数-程序员宅基地

文章浏览阅读4.8k次,点赞17次,收藏9次。datax的使用以及参数解释,快速入门版_datax 参数

JavaScript(二)——猜数字游戏_javascript猜数字游戏-程序员宅基地

文章浏览阅读1w次,点赞13次,收藏79次。下面我们将会通过一个小案例——猜数字游戏,来直观地感受一下如何让JavaScript完成任务。设计要求假设你的老板给你布置了以下游戏设计任务要求:我想让你开发一个猜数字游戏。游戏应随机选择一个 100 以内的自然数, 然后邀请玩家在 10 轮以内猜出这个数字。每轮后都应告知玩家的答案正确与否,如果出错了,则告诉他数字是低了还是高了。并且应显示出玩家前一轮所猜的数字。一旦玩家猜对,或者用尽所有机会,游戏将结束。游戏结束后,可以让玩家选择再次开始。看到这个要求,首先我们要做的是将其分解成简单的可操作_javascript猜数字游戏

Java必须掌握的全局变量和局部变量(含面试大厂题和源码)-程序员宅基地

文章浏览阅读884次,点赞25次,收藏20次。在Java中,全局变量和局部变量的概念通常与类变量(有时被认为是全局变量)和方法内的变量(局部变量)相关联。虽然Java本身没有全局变量的概念,但类的静态变量经常被用作全局变量。

Android系统新产品定制_export build_target 還原-程序员宅基地

文章浏览阅读1.1k次。配置过程分析:1: . ./build/envsetup.shincluding device/samsung/smdkv210/vendorsetup.sh------------------------------------------------------------------build/envsetup.sh末尾有:# Execute the contents o_export build_target 還原

SQLCookBook第四章学习日记11_insert into default-程序员宅基地

文章浏览阅读450次。第四章 插入、更新与删除 4.1插入新纪录4.2插入默认值_insert into default

随便推点

uniapp自定义tabbar必看_uniapp custom-tab-bar-程序员宅基地

文章浏览阅读9.5k次。方式一:实验证明,在根目录下新建custom-tab-bar目录,在目录中新建index.vue是行不通的,vue文件不会被编译方式二:将小程序四大法宝(wxss,json,wxml,js)直接搬过来,虽然tabbar有渲染在小程序上了,但是切换是没有效果的,所以还是行不通方式三(行得通)经过上面的两个尝试,还是乖乖的以vue的做法吧,用单页面的形式,通过v-show控制组件的隐藏和显示注意:v-show有时没有效果,因为v-show是通过display:none来控制的,它的权重没_uniapp custom-tab-bar

树莓派系列-3-连接到树莓派_树莓派 片选接到-程序员宅基地

文章浏览阅读1.3k次。我们用树莓派,估计是没有人会接着屏幕使用的,但是如果有需求也可以使用。如果我们不用屏幕来使用树莓派,那么就得使用SSH、VNC、还有我们的Windows远程工具了。1.SSH 需要在树莓派中开启SSH支持,开启SSH支持有多种方式,这里我就说说我用的,第一种 就是在我们烧写有系统的时候,在boot的分区里面新建一个不带任何后缀的ssh文件,最简单的方式就是新建txt文件,完了重命名为s..._树莓派 片选接到

【毕业设计】STM32化工厂系统-程序员宅基地

文章浏览阅读32次。整个系统以STM32 单片机作为核心控制器,通过DHT11检测温湿度,通过CO传感器检测CO浓度,通过火焰传感器检测火焰,通过红外传感器检测人,通过RFID模块检测刷卡,检测到的数据通过OLED显示并通过无线传输模块上传数据到手机APP,通过继电器控制水阀,通过蜂鸣器报警。

CSS三角、界面样式(cursor、input输入边框不改变颜色、textarea拖拽不改变大小)、vertical-align、溢出文字省略号显示、CSS初始化_html css input::cue-程序员宅基地

文章浏览阅读1.5k次,点赞2次,收藏7次。vertical-align的可选值为:1. bottom: 图片的底线和文字的底线对齐,2. baseline:默认,图片的底线和文字的基线对齐,3. middle: 图片的中线和文字的中线对齐,4. top:图片的顶线和文字的顶线对齐。不同浏览器对有些标签的默认值是不同的,为了消除不同浏览器对HTML文本呈现的差异,所以需要进行CSS初始化。当我们选择input输入框,进行文字输入的时候,边框会改变颜色。textarea默认可以在右下角进行拖拽,改变输入框的大小。CSS初始化参考如下。_html css input::cue

【CS231N】5、神经网络静态部分:数据预处理等-程序员宅基地

文章浏览阅读84次。一、疑问二、知识点1. 白化​ 白化操作的输入是特征基准上的数据,然后对每个维度除以其特征值来对数值范围进行归一化。该变换的几何解释是:如果数据服从多变量的高斯分布,那么经过白化后,数据的分布将会是一个均值为零,且协方差相等的矩阵。该操作的代码如下:# 对数据进行白化操作:# 除以特征值 Xwhite = Xrot / np.sqrt(S + 1e-5)​ 警告:夸大的噪声。注意分母..._人工神经网络系统中的静态数据

MyEclipse开发教程:使用REST Web Services管理JPA实体(四)-程序员宅基地

文章浏览阅读81次。MyEclipse 在线订购年终抄底促销!火爆开抢>>MyEclipse最新版下载使用REST Web Services来管理JPA实体。在逆向工程数据库表后生成REST Web服务,下面的示例创建用于管理博客条目的简单Web服务。你将学会:利用数据库逆向工程开发REST Web服务部署到Tomcat服务器使用REST Web服务资源管理器进行测试没有MyEcli..._myeclipse项目中不能选add rest web service compatibility