当前位置: 首页 > 知识库问答 >
问题:

findElement在Android上的Appium中无法工作

郝峰
2023-03-14

我正在尝试点击设置应用程序中的显示按钮。但“FindElementBy..”语句不起作用,有时我会得到“nullpointer exception”或“no such element exist”异常,有时测试通过时没有单击Display按钮。

我尝试了不同的应用程序,但仍然是FindElementBy...在Win10中不工作。但当我从Win7笔记本电脑上运行同一台真实设备时,同样的代码也在工作。

Project正在使用以下JAR:

java-client-4.1.2.jar

Selenium-Server-Standalone-3.4.0.jar

面向Eclipse的Android开发工具(addon)

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等),但在Win10机器上都没有用。我不认为这是一个定位器的问题,因为它们在我的win7笔记本电脑上工作。

Appium日志:

信息:Appium REST http接口侦听器在127.0.0.1:4723启动

信息:[debug]非默认服务器参数:{“Address”:“127.0.0.1”,“LognoColors”:True,“PlatformName”:“Android”,“PlatformVersion”:“23”,“AutomationName”:“Appium”}

信息:控制台日志级别:调试

信息:客户端用户代理字符串:apache-httpclient/4.5.3(java/1.8.0_144)

信息:[debug]没有得到应用程序,但得到了Android软件包,将尝试在设备上启动它

信息:[debug]正在创建新的appium会话44F52F68-60A6-4469-9575-0C1BFE2D999D

信息:启动android应用程序

信息:[debug]正在获取Java版本

信息:Java版本为:1.8.0_144

信息:[debug]是否使用快速重置?真

信息:[debug]正在为会话准备设备

信息:[debug]未检查应用程序是否存在,因为我们假设它已经在设备上

信息:[debug]正在获取连接得设备...

信息:[debug]正在执行cmd:“C:\Program Files(x86)\android\android-sdk\platform-tools\adb.exe”设备

信息:[debug]1个设备已连接

信息:[debug]等待设备就绪并响应shell命令(超时=5)

信息:[debug]正在执行cmd:“C:\Program Files(x86)\android\android-sdk\platform-tools\adb.exe”-S 964AA907D030等待-设备

信息:[debug]执行cmd:“C:\Program Files(x86)\android\android-sdk\platform-tools\adb.exe”-s 964AA907D030 shell“echo'ready”“

信息:[debug]正在启动logcat捕获

信息:[debug]获取设备API级别

信息:[debug]正在执行cmd:“C:\Program Files(x86)\android\android-sdk\platform-tools\adb.exe”-s 964AA907D030 shell“getprop ro.build.version.sdk”

信息:[debug]设备处于API级别23

信息:设备API级别为:23

信息:[debug]提取语言的字符串:default

信息:[debug]无法获取字符串,但看起来我们有一个旧的字符串文件,因此忽略

信息:[debug]执行cmd:“C:\Program Files(x86)\android\android-sdk\platform-tools\adb.exe”-s 964aa907d030 shell“rm-rf/data/local/tmp/strings.json”

信息:[debug]未卸载应用程序,因为服务器未启动--完全重置

信息:[debug]跳过安装,因为我们启动时使用的是软件包而不是应用程序路径

信息:[debug]将系统:4724转发到设备:4724

信息:[debug]正在将appium引导程序推送到设备...

信息:[debug]执行cmd:“C:\ProgramFiles(x86)\android\android-sdk\platform-tools\adb.exe”-s 964AA907D030 push“C:\ProgramFiles(x86)\appium\node_module\appium\build\android_bootstrap\appiumbootstrap.jar”/data/local/tmp/

信息:[debug]正在将设置apk推送到设备...

信息:[debug]执行cmd:“C:\ProgramFiles(x86)\android\android-sdk\platform-tools\adb.exe”-s 964AA907D030安装“C:\ProgramFiles(x86)\appium\node_module\appium\build\settings_apk\settings_apk-debug.apk”

信息:[debug]正在将解锁帮助程序应用程序推到设备...

信息:[debug]执行cmd:“C:\Program Files(x86)\android\android-sdk\platform-tools\adb.exe”-s 964AA907D030安装“C:\Program Files(x86)\appium\node_module\appium\build\unlock_apk\unlock_apk-debug.apk”

信息:启动应用程序

信息:[debug]正在尝试终止所有“UIAutomator”进程

信息:[debug]正在使用“uiautomator”获取所有进程

信息:[debug]正在执行cmd:“C:\Program Files(x86)\android\android-sdk\platform-tools\adb.exe”-s 964AA907D030 shell“ps'uiautomator'”

信息:[debug]找不到匹配的进程

信息:[debug]正在运行引导程序

信息:[debug]生成: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

信息:[debug][UIAUTOMATOR STDOUT]instrumentation_status:numtests=1

信息:[debug][UIAUTOMATOR STDOUT]instrumentation_status:stream=

信息:[debug][UIAUTOMATOR STDOUT]io.appium.android.bootstrap.bootstrap:

信息:[debug][UIAUTOMATOR STDOUT]instrumentation_status:id=UIAutomatorTestRunner

信息:[debug][UIAUTOMATOR STDOUT]instrumentation_status:test=testrunserver

信息:[debug][UIAUTOMATOR STDOUT]instrumentation_status:class=io.appium.android.bootstrap.bootstrap

信息:[debug][UIAUTOMATOR STDOUT]instrumentation_status:current=1

信息:[debug][UIAUTOMATOR STDOUT]instrumentation_status_code:1

信息:端口4724上已打开[debug][BOOTSTRAP][debug]套接字

信息:[debug]如果设备不活动,将唤醒设备

信息:[debug]正在将命令推送到appium工作队列:[“Wake”,{}]

信息:[debug][BOOTSTRAP][debug]正在加载JSON...

信息:[debug][BOOTSTRAP][debug]从客户端获得数据:{“cmd”:“action”,“action”:“wake”,“params”:{}}

信息:[debug][BOOTSTRAP][debug]获得了ACTION类型的命令

信息:[debug][BOOTSTRAP][debug]获得命令操作:唤醒

信息:[debug]正在执行cmd:“C:\Program Files(x86)\android\android-sdk\platform-tools\adb.exe”-S 964AA907D030 shell“dumpsys window”

信息:[调试]屏幕已解锁,正在继续。

信息:[debug]正在将命令推送到appium工作队列:[“GetDataDir”,{}]

信息:[debug][BOOTSTRAP][debug]从客户端获得数据:{“cmd”:“action”,“action”:“GetDataDir”,“params”:{}}

信息:[debug][BOOTSTRAP][debug]获得了ACTION类型的命令

信息:[debug][BOOTSTRAP][debug]已获得命令操作:getDataDir

信息:[debug]dataDir设置为:/data/local/tmp

信息:[debug]将命令推送到appium工作队列:[“CompressedLayouthierarchy”,{“CompressLayout”:false}]

信息:[debug][BOOTSTRAP][debug]从客户端获取数据:{“cmd”:“action”,“action”:“compressedlayouthierarchy”,“params”:{“compresslayout”:false}}

信息:[debug][BOOTSTRAP][debug]获得了ACTION类型的命令

信息:[debug][BOOTSTRAP][debug]获得命令操作:compressedLayoutHierarchy

信息:[debug][BOOTSTRAP][debug]返回结果:{“status”:0,“value”:false}

信息:[debug]设备处于API级别23

信息:[debug]正在执行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”

信息:[debug]正在等待pkg“com.android.settings”和活动“com.android.settings.mainsettings”被聚焦

信息:[debug]获取焦点包和活动

信息:[debug]正在执行cmd:“C:\Program Files(x86)\android\android-sdk\platform-tools\adb.exe”-s 964aa907d030 shell“dumpsys window windows”

信息:[debug]正在执行cmd:“C:\Program Files(x86)\android\android-sdk\platform-tools\adb.exe”-s 964AA907D030 shell“getprop ro.build.version.release”

信息:[debug]设备的版本为6.0.1

信息:[debug]设备已启动!命令就绪

信息:[debug]将命令超时设置为默认值60秒

信息:[debug]成功响应客户端:{“Status”:0,“Value”:{“PlatformVersion”:“Linux”,“BrowserName”:“Android”,“PlatformVersion”:“6.0.1”,“WebStorageEnabled”:False,“TakessCreenShot”:True,“JavaScriptEnabled”:True,“DatabaseEnabled”:False,“NetworkConnectionEnabled”:True,“LocationContExtenabled”:False,“Warnings”:{},“Desired”:{“AppPackage”:“

信息:<--GET/WD/Hub/Session/44F52F68-60A6-4469-9575-0C1BFE2D999D 200 1.705MS-695{“状态”:0,“值”:{“平台”:“Linux”,“BrowserName”:“Android”,“PlatformVersion”:“6.0.1”,“WebStorageEnabled”:false,“TakessCreenShot”:true,“JavaScriptEnabled”:true,“DatabaseEnabled”:false,“NetworkConnectionEnabled”:true,“LocationContExtenabled”:false,“

信息:-->POST/wd/hub/session/44f52f68-60a6-4469-9575-0c1bfe2d999d/element{“using”:“-Android UIAutomator”,“value”:“UISelector().text(\”display\“)”}

信息:[debug]等待条件最多0ms

信息:[debug]将命令推送到appium工作队列:[“find”,{“strategy”:“-Android UIAutomator”,“selector”:“UISelector().text(\”display\“)”,“context”:“”,“multiple”:false}]

信息:[debug][BOOTSTRAP][debug]从客户端获取数据:{“cmd”:“action”,“action”:“find”,“params”:{“strategy”:“-Android UIAutomator”,“selector”:“UISelector().text(\”display\“)”,“context”:“”,“multiple”:false}}

信息:[debug][BOOTSTRAP][debug]获得了ACTION类型的命令

信息:[debug][BOOTSTRAP][debug]已获得命令操作:查找

信息:[debug][BOOTSTRAP][debug]查找UiSelector()。使用带有上下文ID:multiple:false的ANDROID_UIAUTOMATOR的文本(“display”)

信息:[debug][BOOTSTRAP][debug]分析选择器:UiSelector().text(“display”)

信息:[debug][BOOTSTRAP][debug]UiSelector强制类型:class java.lang.string arg:“display”

信息:[debug][BOOTSTRAP][debug]使用:uiselector[text=display]

信息:[debug][BOOTSTRAP][debug]返回结果:{“status”:0,“value”:{“element”:“1”}}

信息:<--POST/WD/HUB/SESSION/44F52F68-60A6-4469-9575-0C1BFE2D999D/ELEMENT 200 82.340MS-87{“状态”:0,“值”:{“ELEMENT”:“1”},“SESSIONID”:“44F52F68-60A6-4469-9575-0C1BFE2D999D”}

信息:-->POST/WD/HUB/SESSION/44F52F68-60A6-4469-9575-0C1BFE2D999D/element/1/click{“id”:“1”}信息:[debug]将命令推送到appium工作队列:[“element:click”,{“elementId”:“1”}]

信息:[debug][BOOTSTRAP][debug]从客户端获取数据:{“cmd”:“action”,“action”:“element:click”,“params”:{“elementId”:“1”}}

信息:[debug][BOOTSTRAP][debug]获得了ACTION类型的命令

信息:[debug][BOOTSTRAP][debug]获得命令操作:单击

信息:<--POST/WD/Hub/Session/44F52F68-60A6-4469-9575-0C1BFE2D999D/元素/1/Click 200 40.169MS-76{“状态”:0,“值”:true,“SessionID”:“44F52F68-60A6-4469-9575-0C1BFE2D999D”}

信息:[debug][BOOTSTRAP][debug]返回结果:{“status”:0,“value”:true}

信息:[debug]在60秒内没有获得新命令,正在关闭...

信息:正在关闭appium会话

信息:[debug]按HOME键

信息:[debug][BOOTSTRAP][debug]从客户端获得数据:{“cmd”:“shutdown”}

信息:[debug][BOOTSTRAP][debug]获得了SHUTDOWN类型的命令

信息:[debug][BOOTSTRAP][debug]返回结果:{“status”:0,“value”:“OK,shutting down”}

信息:[debug]已发送关闭命令,正在等待UiAutomator停止...

信息:[debug][BOOTSTRAP][debug]关闭客户端连接

信息:[debug][UIAUTOMATOR STDOUT]instrumentation_status:numtests=1

信息:[debug][UIAUTOMATOR STDOUT]instrumentation_status:test=testrunserver

信息:[debug][UIAUTOMATOR STDOUT]instrumentation_status:class=io.appium.android.bootstrap.bootstrap

信息:[debug][UIAUTOMATOR STDOUT]instrumentation_status:current=1

信息:[debug][UIAUTOMATOR STDOUT]instrumentation_status_code:-1

信息:[debug]UiAutomator正常关闭

信息:[debug]正在清理android对象

信息:[debug]正在清理appium会话

信息:[debug]我们关闭了,因为没有新命令进入

共有1个答案

黄浩涆
2023-03-14

您只需尝试一下:driver.findElement(By.byName(“display”));

driver.findElement(By.xpath("//android.widget.TextView[@text='Display']"));
 类似资料:
  • 基本页面类: 并在该类上实现: 我已经将参数编辑到50秒,但在Junit测试中没有等待。在使用AndroidDriver之前,我使用了WebDriver并且它工作得很好,但是我需要Android Driver来做TouchAction。所以我的测试用例总是失败,因为当assert运行时,它会立即找到元素,而元素还不可用。

  • 这里有一个git repo包含一个应用程序和一个测试项目。失败的JUnit测试证明了问题:https://github.com/achengs/an-appium-question 详细信息如下(代码和Appium日志交错) 这是第一个成功的发现。活动的布局xml文件对于我要查找的文本字段具有以下属性: 有一个HTML请求。我正在测试一个原生的Android应用程序。下面是当前测试活动的布局xml

  • 问候flutter开发人员正在开发一个应用程序,iOS和Android使用手机身份验证用户一切正常iOS但Android当这一行被称为我得到一个错误: 错误: E/flutter(14190):[ERROR: flutter/shell/通用/shell.cc(184)]Dart错误:未处理的异常: E/flutter(14190): PlatformExc0019(错误,空引用,空)E/flut

  • 我对Android Studio有意见。 任务:应用程序:ProcessDebugResources失败AGPBI:{“kind”:“error”,“text”:“Android资源链接失败”,“sources”:[{“file”:“/users/luisabsg/.gradle/caches/transforms-2/files-2.1/270e51d2bcfda0833b0b336f50197

  • 在我的应用程序代码中,在使用滑动时,滚动方法并执行代码。获取以下异常。 org.openqa.selenium.WebDriverException:处理命令时发生未知的服务器端错误。(警告:服务器未提供任何stacktrace信息) 在自动建议下拉列表中,我没有看到方法。当我手动键入SendKeyEvent()时,它会抛出一个错误,即类型AndroidDriver中未定义的错误。 有人能告诉我吗

  • 这是我的密码 我想执行滚动,但在屏幕上它没有执行任何操作。这是android设备的屏幕截图 以下是Appium服务器日志: 信息:[调试][引导][调试]已注册的崩溃监视程序。信息:[debug][BOOTSTRAP][debug]客户端连接信息:[debug][BOOTSTRAP][debug]从客户端获取数据:{“cmd”:“action”,“action”:“wake”,“params”:{