findElement在Android上的Appium中不起作用
我试图点击设置应用中的显示按钮。 但是“findElementBy ..”语句不起作用,有时候我得到'空指针异常'或'没有这样的元素存在'异常,有时候测试通过时没有点击显示按钮。findElement在Android上的Appium中不起作用
我曾尝试与不同的应用程序,但仍然findElementBy ...是不是在Win10工作。 但是,当我在Win 7笔记本电脑的相同实际设备上运行代码时,这段代码正在工作。
项目使用下列jar:
GSON-2.2.2.jar
Java的客户端 - 4.1.2.jar
硒的服务器独立-3.4.0.jar
适用于Eclipse的Android开发工具(插件)
的Android对Maven的Eclipse 1.4.0(插件)
Appium Sever的(版本:1.4.13.1)
Appium代码:
@Test
public void Script1() throws Exception{
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("automationName", "UiAutomator 2");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("platformVersion", "6.0.1");
capabilities.setCapability("deviceName", "Redmi 3S");
capabilities.setCapability("appPackage", "com.android.settings");
capabilities.setCapability("appActivity", "com.android.settings.MainSettings");
AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
Thread.sleep(5000);
driver.findElementByAndroidUIAutomator("UiSelector().text(\"Display\")").click();
}
我有已经尝试过不同类型的定位器(即ByID,ClassPath,xpath,UISelector等),但没有任何工作赢得10机器。我不这么认为,因为他们正在使用我的win7笔记本电脑,所以存在定位器问题。
Appium日志:
启动Appium服务器命令:C:\程序文件(x86)\ Appium \ node.exe LIB \服务器\ main.js --address 127.0.0.1 --port 4723 --platform-name Android --platform-version 23 --automation-name Appium --log-no-color
警告:对版本< 0.12的Appium支持已被弃用,并且将在未来版本中被删除。请升级!
信息:欢迎Appium v1.4.13(REV c75d8adcb66a75818a542fe1891a34260c21f76a)
信息:Appium REST HTTP接口听众开始127.0.0.1:4723
信息:[调试]非默认的服务器ARGS:{ “address”:“127.0.0.1”,“logNoColors”:true,“platformName”:“Android”,“platformVersion”:“23”,“automationName”:“Appium”}
info:Console LogLevel:debug
info: - > POST/wd/hub/session {“desiredCapabilities”:{“a ppPackage “:” com.android.settings “ ”appActivity“: ”com.android.settings.MainSettings“, ”platformVersion“:” 6.0。1“,”automationName“:”UiAutomator 2“,”platformName“:”Android“,”deviceName“:”Redmi 3S“},”requiredCapabilities“:{},”capabilities“:{”desiredCapabilities“:{”appPackage“ :“com.android.settings”,“appActivity”:“com.android.settings.MainSettings”,“platformVersion”:“6.0.1”,“automationName”:“UiAutomator 2”,“platformName”:“Android”, “deviceName”:“Redmi 3S”},“requiredCapabilities”:{},“alwaysMatch”:{“platformName”:“Android”},“firstMatch”:[]}}
info: :Apache的HttpClient的/ 4.5.3(Java/1.8.0_144)
信息:[调试]没有收到应用程序,但没有得到Android包,将尝试启动它在设备上
信息:调试]创建新的appiu米会议44f52f68-60a6-4469-9575-0c1bfe2d999d
信息:正在启动Android appium
信息:[调试]获取Java版本
信息:Java版本是:1.8.0_144
信息:[调试]检查亚行是否存在
信息:[调试]从C使用亚行:\程序文件(x86)\ Android的\ Android的SDK \平台TOOLS \ adb.exe
警告:没有应用程序功能,无法解析包/活动
info:[debug]使用快速重置?真正
信息:[调试]会话准备设备
信息:[调试]不检查应用程序是否存在,因为我们假设它已经器件
信息上:检索设备
信息:[调试]想找到一个连接的Android设备
信息:[调试]入门连接设备...
info:[debug]执行cmd:“C:\ Program Files文件(x86)\ Android \ android-sdk \ platform-tools \ adb.exe”设备
info:[debug] 1 device(s)connected
信息:实测值设备964aa907d030
信息:[调试]设置设备ID 964aa907d030
信息:[调试]等待装置做好准备,以响应外壳命令(超时= 5)
info:[debug]执行cmd:“C:\ Program Files(x86)\ Android \ android-sdk \ pl atform-tools \ adb.exe“-s 964aa907d030等待设备
info:[debug]执行cmd:”C:\ Program Files(x86)\ Android \ android-sdk \ platform-tools \ adb。EXE “-s 964aa907d030壳 ”回声 '准备好'“
信息:[调试]启动logcat中捕获
信息:[调试]获取设备API级别
信息:[调试]执行CMD” C:\ Program Files(x86)\ Android \ android-sdk \ platform-tools \ adb.exe“-s 964aa907d030 shell”getprop ro.build.version.sdk“
info:[debug] Device is at API Level 23
info:设备API级别是:23
信息:[调试]提取字符串语言:默认
信息:[调试] APK没有本地存在
信息:[调试]无法获取字符串,但看起来我们有一个旧的字符串文件无论如何,所以忽略
info:[debug]执行cmd:“C:\ Program Files文件(x86)\安卓android-SDK平台工具\ adb.exe”-s 964aa907d030 shell“rm- rf /data/local/tmp/strings.json“
info:[debug]不卸载应用程序,因为服务器未启动--full-reset
信息:[调试]跳过安装,因为我们有一个包,而不是一个应用程序路径
信息推出:[调试]转发系统:4724至设备:4724
信息:[调试]执行CMD :“C:\ Program Files(x86)\ Android \ android-sdk \ platform-tools \ adb.exe”-s 964aa907d030 forward tcp:4724 tcp:4724
info:[debug]将appium bootstrap推送到设备。 ..
info:[debug]执行cmd:“C:\ Program Files(x86)\ Android \ android- sdk \ platform-tools \ adb.exe“-s 964aa907d030 push”C:\ Program Files(x86)\ Appium \ node_modules \ appium \ build \ android_bootstrap \ AppiumBootstrap.jar“/ data/local/tmp/
info :[debug]执行cmd命令:“C:\ Program Files(x86)\ Android \ android-sdk \ platform-tools \ adb.exe”-s 964aa907d030安装 “C:\ Program Files文件(x86)的\ Appium \ node_modules \ appium \建立\ settings_apk \ settings_apk-debug.apk”
信息:[调试]推解锁助手应用程序设备...
info:[debug]执行cmd:“C:\ P (x86)\ Android \ android-sdk \ platform-tools \ adb.exe“-s 964aa907d030 install”C:\ Program Files(x86)\ Appium \ node_modules \ appium \ build \ unlock_apk \ unlock_apk-debug.apk“
信息:启动应用程序
信息:[调试]试图杀死所有 'uiautomator' 处理
信息:[调试]掌握 'uiautomator'
信息的所有进程:[调试]执行cmd:“C:\ Program Files(x86)\ Android \ android-sdk \ platform-tools \ adb。EXE” -s 964aa907d030壳 “PS 'uiautomator'”
信息:[调试]没有匹配的过程中发现
信息:[调试]运行引导
信息:[调试]产卵:C:\ Program Files(x86)\ Android \ android-sdk \ platform-tools \ adb.exe -s 964aa907d030 shell uiautomator runtest AppiumBootstrap.jar -c io.appium.android.bootstrap.Bootstrap -e pkg com.android.settings -e disableAndroidWatchers false
info:[debug] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:numtests = 1
信息:[调试] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:流=
信息:[调试] [UIAUTOMATOR STDOUT] io.appium.android.bootstrap.Bootstrap:
信息:[调试] [UIAUTOMATOR STDOUT ] INSTRUMENTATION_STATUS:ID = UiAutomatorTestRunner
信息:[调试] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:测试= testRunServer
信息:[调试] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:类= io.appium.android.bootstrap.Bootstrap
信息:[调试] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:电流= 1
信息:[调试] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS_CODE:1
信息:[调试] [BOOTSTRAP] [调试]插孔打开在端口4724
信息:[调试] [引导] [调试] Appium插槽服务器就绪
信息:[调试]醒来设备,如果它不是活着
信息:[调试]芘ushing命令appium工作队列: “唤醒”,{}]
信息:[调试] [引导] [调试]载入中... JSON
信息:[调试] [引导] [调试]注册崩溃观察者。
信息:[调试] [BOOTSTRAP] [调试]客户端连接
信息:[调试] [BOOTSTRAP] [调试]得到了客户机数据:{ “CMD”: “动作”, “动作”: “唤醒”, “PARAMS”:{}}
信息:[调试] [BOOTSTRAP] [调试]得到类型的动作命令
信息:[调试] [BOOTSTRAP] [调试]得到命令动作:唤醒
info:[debug] [BOOTSTRAP] [debug]返回结果:{“status”:0,“value”:true}
信息:[调试]执行CMD: “C:\ Program Files文件(x86)的\ Android的\ Android的SDK \平台工具\ adb.exe” -s 964aa907d030壳 “dumpsys窗口”
信息:调试]屏幕已解锁,继续。
信息:[调试]推命令appium工作队列:[ “getDataDir”,{}]
信息:[调试] [BOOTSTRAP] [调试]得到了客户机数据:{ “CMD”:”动作”, “动作”: “getDataDir”, “PARAMS”:{}}
信息:[调试] [BOOTSTRAP] [调试]得到类型的动作命令
信息:[调试] [BOOTSTRAP] [debug]得到的命令行动:getDataDir
info:[debug] [BOOTSTRAP] [debug]返回结果:{“status”:0,“value”:“/ data/local/tm P “}
信息:[调试] DATADIR设置为:/数据/本地的/ tmp
信息:[调试]推命令appium工作队列:[” compressedLayoutHierarchy”,{ “compressLayout”:假} ]
info:[debug] [BOOTSTRAP] [debug]从客户端获得数据:{“cmd”:“action”,“action”:“compressedLayoutHierarchy”,“params”:{“compressLayout”:false}}
信息:[调试] [BOOTSTRAP] [调试]得到类型的动作命令
信息:[调试] [BOOTSTRAP] [d ebug]得到命令动作:compressedLayoutHierarchy
信息:[调试] [BOOTSTRAP] [调试返回结果:{ “状态”:0 “值”:假}
信息:[调试]获取设备API级别
info:[debug]执行cmd:“C:\ Program Files(x86)\ Android \ android-sdk \ platform-tools \ adb.exe”-s 964aa907d030 shell“getprop ro.build.version.sdk “
信息:[调试]设备在API等级23
信息:[调试]执行CMD” C:\ Program Files(x86)\ Android \ android-sdk \ platform-tools \ adb.exe“-s 964aa907d030 shell”am start -S -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -f 0x10200000 -n com.android.settings/com.android.settings.MainSettings“
info:[debug]等待pkg”com.android.settings“和activity”com.android.settings.MainSettings“到集中
信息:[调试]获取集中包装和活动
信息:[调试]执行CMD:“C:\ Program Files文件(x86)的\ Android的\ Android的SDK \平台工具\ ADB。 exe“-s 964aa907d030外壳”dumpsys窗口窗口“
info:[debug]执行cmd:“C:\ Program Files(x86)\ Android \ android-sdk \ platform-tools \ adb.exe”-s 964aa907d030 shell“getprop ro.build.version.release”
info:[debug] Device is at release version 6.0.1
info:[debug] Device started!准备命令
信息:[调试]命令超时设置为60秒
默认信息:[调试] Appium会议开始的sessionId 44f52f68-60a6-4469-9575-0c1bfe2d999d
信息: < - POST/WD /集线器/会话303 6622.421毫秒 - 74
信息: - > GET/WD /集线器/会话/ 44f52f68-60a6-4469-9575-0c1bfe2d999d {}
信息:[调试]成功响应客户端:{“status”:0,“value”:{“平台 “:” LINUX “ ”browserName“: ”机器人“, ”platformVersion“: ”6.0.1“, ”webStorageEnabled“:假的, ”takesScreenshot“:真实的, ”javascriptEnabled“:真实的, ”databaseEnabled“:假” networkConnectionEnabled “:真” locationContextEnabled “:假,” 警告 “:{},” 期望的 “:{” appPackage “:” com.android.settings “ ”appActivity“: ”com.android.settings.MainSettings“,” platformVersion“:”6.0.1“,”automationName“:”UiAutomator 2“,”platformName“:”Android“,”deviceName“:”Redmi 3S“},”appPackage“:”com.android.settings“,” “:”com.android.settings.MainSettings“,”automationName“:”UiAutomator 2“,”platformName“:”Android“,”deviceName“:”964aa907d030“},”sessionId“:”44f52f68-60a6-4469-9575 -0c1bfe2d999d“}
info:< - GET/wd/hub/session/44f52f68-60a6-4469-9575-0c1bfe2d999d 200 1.705 ms - 695 {”status“:0,”value“:{”platform“ : “LINUX”, “browserName”: “机器人”, “platformVersion”: “6.0.1”,“我们bStorageEnabled “:假” takesScreenshot “:真” javascriptEnabled “:真” databaseEnabled “:假” networkConnectionEnabled “:真” locationContextEnabled “:假,” 警告 “:{},” 期望的 “:{” appPackage” :“com.android.settings”,“appActivity”:“com.android.settings.MainSettings”,“platformVersion”:“6.0.1”,“automationName”:“UiAutomator 2”,“platformName”:“Android”, “deviceName”:“Redmi 3S”},“appPackage”:“com.android.settings”,“appActivity”:“com.android.settings.MainSettings”,“automationName”:“UiAutomator 2”,“platformName”:“ Android“,”deviceName“:”964aa907d030“},”sessionId“:”44f52f68-60a6-4469-9575-0c1bfe2d999d“}
info: - > POST/wd/hub/session/44f52f68-60a6-4469 -9575-0c1bfe2d999d/element {“using”:“ - android uiautomator”,“value”:“UiSelector()。text(\”Display \“)”}
inf ○:[调试]等待最多为0ms的条件
信息:[调试]推命令appium工作队列: “发现”,{ “策略”: “ - 机器人uiautomator”, “选择”:“UiSelector( ).text(\“Display \”)“,”context“:”“,”multiple“:false}]
info:[debug] [BOOTSTRAP] [debug]从客户端获得数据:{”cmd“ :“action”,“action”:“find”,“params”:{“strategy”:“ - android uiautomator”,“selector”:“UiSelector().text(\”Display \“) : “”, “多重”:假}}
信息:[调试] [BOOTSTRAP] [调试]得到类型的动作命令
信息:[调试] [BOOTSTRAP] [DE错误]得到命令操作:找到
信息:[调试] [引导] [调试]使用ANDROID_UIAUTOMATOR与CONTEXTID查找UiSelector()文本( “显示”):多重:假
信息:[调试] [BOOTSTRAP] [debug]解析选择器:UiSelector().text(“Display”)
info:[debug] [BOOTSTRAP] [debug] UiSelector强制类型:类java.lang。串ARG: “显示”
信息:[调试] [BOOTSTRAP] [调试]使用:UiSelector [TEXT =显示]
信息:[调试] [BOOTSTRAP] [调试返回结果:{“状态“:0,”value“:{”ELEMENT“:”1“}}
info:[debug]成功响应客户端:{”status“:0,”value“:{”ELEMENT“ 1 “},” 的sessionId “:” 44f52f68-60a6-4469-9575-0c1bfe2d999d“}
信息:< - POST/WD /集线器/会话/ 44f52f68-60a6-4469-9575-0c1bfe2d999d /元件200 82.340 ms - 87 {“status”:0,“value”:{“ELEMENT”:“1”},“sessionId”:“44f52f68-60a6-4469-9575-0c1bf POST:/ wd/hub/session/44f52f68-60a6-4469-9575-0c1bfe2d999d/element/1/click {“id”:“1”} info:[debug]推送命令到appium工作队列:[“element:click”,{“elementId”:“1”}]
info:[debug] [BOOTSTRAP] [debug]从客户端获得数据:{“cmd”:“动作”, “动作”: “元素:点击”, “PARAMS”:{ “elementId”: “1”}}
信息:[调试] [BOOTSTRAP] [调试]得到类型的动作命令
info:[调试] [BOOTSTRAP] [调试]得到的命令行动:点击
信息:[调试]响应成功客户端:{ “地位”:0, “值”:真 “的sessionId”: “44f52f68-60a6-4469-9575-0c1bfe2d999d”}
信息:< - POST/wd/hub/session/44f52f68-60a6-4469-9575-0c1bfe2d999d/element/1/click 200 40.169 ms - 76 {“status”:0,“value”:true,“sessionId”:“44f52f68- 60a6-4469-9575-0c1bfe2d999d “}
信息:[调试] [BOOTSTRAP] [调试返回结果:{” 状态 “:0”,值“:真的}
信息:[调试]没在60秒内没有得到新的命令,关闭...
信息:关闭appium会议
信息:[调试]按下HOME键
信息:[调试]执行CMD:“C:\ Program Files文件(x86)的\ Android的\ Android的SDK \平台-tools \ adb.exe” -S 964aa907d030壳 “输入的KeyEvent 3”
信息:[调试]停止的logcat捕获
信息:[调试] logcat的终止代码空,信号SIGTERM
信息:[debug] [BOOTSTRAP] [debu G]得到了客户机数据:{ “CMD”: “关断”}
信息:[调试] [BOOTSTRAP] [调试]得到式SHUTDOWN的命令
信息:[调试] [BOOTSTRAP] [调试]返回结果:{“status”:0,“value”:“OK,关闭”}
info:[debug]发送关机命令,等待UiAutomator停止...
信息:[调试] [BOOTSTRAP] [调试]闭客户端连接
信息:[调试] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:numtests = 1
信息:[调试] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS :stream =。
信息:[调试] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:ID = UiAutomatorTestRunner
信息:[调试] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:测试= testRunServer
信息:[调试] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS :类= io.appium.android.bootstrap.Bootstrap
信息:[调试] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:电流= 1
信息:[调试] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATU S_CODE:0
信息:[调试] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS:流=
信息:[调试] [UIAUTOMATOR STDOUT]试验WatcherResultPrinter =结果。
信息:[调试] [UIAUTOMATOR STDOUT]时间:67.859
信息:[调试] [UIAUTOMATOR STDOUT] OK(1个试验)
信息:[调试] [UIAUTOMATOR STDOUT] INSTRUMENTATION_STATUS_CODE: - 1
信息:[调试] UiAutomator正常关闭
信息:[调试]清理机器人对象
信息:[调试]清洁荷兰国际集团达appium会议
信息:[调试]我们关闭,因为没有新的命令进来
刚刚得到通过添加使用maven项目依赖的解决方案。
你可以试试看:driver.findElement(By.ByName("Display"));
或
driver.findElement(By.xpath("//android.widget.TextView[@text='Display']"));
尝试
driver.findElementByName(“Display”)。click(); 。
或
driver.findElementByxpath( “// * [@ id中= '机器人:ID /标题'] [@文本= '显示']”)点击();
它应该工作
试过,但仍然没有工作 – Sandeep