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

智能推荐

Layui实现点击文字、缩略图查看图片功能_layui查看图片-程序员宅基地

文章浏览阅读4.3k次。刚完成一个客户需求,同一个页面上要有点击缩略图查看大图功能,也有点击图片名称查看原图的功能。点击缩略图查看大图的功能点击缩略图查看大图的功能实现用的是layui开发文档内的layer.photos-相册层。官方开发文档里photos支持传入json和直接读取页面图片两种方式。下面是官方开发文档的截图,官方开发文档链接:https://www.layui.com/doc/m..._layui查看图片

ueditor的配置和使用-程序员宅基地

文章浏览阅读89次。ueditor下载好之后直接复制到项目的WebContent目录下,并将ueditor\jsp\lib下的jar包复制或者剪切到项目的lib目录下。先看一下效果,如下:v1.文件的上传   首先在ueditor/jsp目录下找到config.json文件,就拿Image上传来说吧。  "imageUrlPrefix": "http:/..._ueditor json = new function("return " + result)();

20、NanoDet训练、测试 以及使用ncnn部署Jetson Nano 进行目标检测和串口数据转发-程序员宅基地

文章浏览阅读6.5k次,点赞7次,收藏59次。基本思想:最近想尝试一下nano 上部署nanodet,于是记录一下训练过程,手中有一份labelme标注的数据集,于是开始了一波操作~首先将图片和json数据集转成xml (https://blog.csdn.net/sxj731533730/article/details/90046780),然后将xml数据集转成voc;import sysimport osimport jsonimport xml.etree.ElementTree as ETfrom PIL import Im_nanodet

code::blocks + wxWidgets 2.8 在ubuntu 10.04下的安装-程序员宅基地

文章浏览阅读930次。code::blocks + wxWidgets 2.8 在ubuntu 10.04下的安装p { margin-bottom: 0.21cm; }1、首先安装必要组件代码:安装编译器 sudo apt-get install build-essential

用java Swing做的小游戏&quot;像素鸟&quot;_java swing小游戏-程序员宅基地

文章浏览阅读4.4k次,点赞10次,收藏38次。最终效果 整个项目都是基于swing实现的。窗是口将图片加载到JPanel面板,然后将面板添加到到JFrame窗口实现显示。这个类是选择几只像素鸟的类,也是main函数里执行的方法,代码有详细的注释,这里就不废话了public class select extends JPanel { /** * */ private static final long serialVersio..._java swing小游戏

三分钟教你读懂支票是什么_支票的原理是什么-程序员宅基地

文章浏览阅读8.7k次。三分钟教你读懂支票是什么支票1、支票的概念及特点支票:出票人签发的,委托办理支票存款业务的银行或其他金融机构在见票时无条件支付确定金额给收款人或持票人的票据。支票必填项:支票字样、确定的金额、出票日期、无条件支付委托、付款人名称、出票人签章。支票选填项:付款地、出票地。支票结算特点:(1)简便,手续_支票的原理是什么

随便推点

Vue简明实用教程(04)——事件处理_vue html里面如何直接写事件函数-程序员宅基地

文章浏览阅读1.1k次,点赞4次,收藏5次。在Vue中可非常便利地进行事件处理,例如:点击事件、鼠标悬停事件等。_vue html里面如何直接写事件函数

南京邮电大学离散数学实验一(求主析取和主合取范式)-程序员宅基地

文章浏览阅读4.5k次,点赞15次,收藏67次。南京邮电大学离散数学实验一(求主析取和主合取范式)_离散数学实验

{spring.cloud.client.ipAddress}_spring.cloud.client.ip-address-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏5次。1.在springcloud中服务的 Instance ID 默认值是:${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}},也就是:主机名:应用名:应用端口。如图12.可以自定义:eureka.instance...._spring.cloud.client.ip-address

单目标跟踪OTB、VOT数据集介绍_otb数据集官网-程序员宅基地

文章浏览阅读2.1w次,点赞6次,收藏63次。OTB分为:OTB50和OTB100官方下载链接为:OTB官方数据集网站http://cvlab.hanyang.ac.kr/tracker_benchmark/datasets.html百度云链接:链接:https://pan.baidu.com/s/1Ck51d7OQ8w8BGcTL9UtopA提取码:jn0k复制这段内容后打开百度网盘手机App,操作更方便哦其中50和100,分别..._otb数据集官网

Xcode修改模拟器Simulator系统版本_xcode模拟器切换ios版本-程序员宅基地

文章浏览阅读5.1k次。从Xcode菜单栏里打开Xcode -&gt; Preferences -&gt; Components -&gt; Simulators,下载对应版本的模拟器。由于模拟器相关文件较大,下载时间较长,需要耐心等待,下载完成后,对应版本的模拟器前面的下载按钮就会变成下载完成的样式。点击Xcode菜单栏 Window -&gt; Devices,然后可以看到设备列表,然而在模拟器列表(..._xcode模拟器切换ios版本

chatgpt赋能python:Python如何分离CSV的列_python的csv拆列-程序员宅基地

文章浏览阅读270次。CSV文件是一种以逗号或其他分隔符分隔的文件格式,用于存储表格数据。它可以用任何文本编辑器打开,并且非常适合在电子表格程序(例如Microsoft Excel或Google Sheets)中打开和处理。CSV文件通常由一组记录组成,每条记录包含一个或多个字段。字段之间使用逗号或其他指定的分隔符分隔。CSV文件中的第一行通常包含列标题,这些标题描述了每个字段的含义。Jack,19,UK本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。_python的csv拆列

推荐文章

热门文章

相关标签