android Appium:“使用给定的搜索参数无法在页面上定位元素”错误

zy1mlcev  于 2022-12-02  发布在  Android
关注(0)|答案(5)|浏览(201)

我是Appium的新手,一直在尝试自动化Android的转换计算器应用程序。我收到错误“org.openqa.selenium.NoSuchElementException:尝试查找EditText元素时,无法使用给定的搜索参数”“在页面上找到元素。使用Appium 1.0.0版和Android 4.3
下面是我的代码:

List<WebElement> textViews = driver.findElements(By.className("android.widget.TextView"));
for (i=0; i<textViews.size(); i++) {
  if(textViews.get(i).getText().toLowerCase().contains("memory")) {
    textViews.get(i).click();
  }
} 
Thread.sleep(5000);

WebElement editText = driver.findElement(By.className("android.widget.EditText"));
editText.sendKeys("123");

甚至findElement by ID也不起作用。请让我知道我在这里做错了什么,或者如果我需要提供更多细节。

nx7onnlm

nx7onnlm1#

我会使用driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);而不是Thread.sleep(5000)
尝试使用更新版本的Appium,我已经改进了很多。您可以在这里下载最新版本的Appium和Appium客户端:http://appium.io/downloads.html
但是要小心,因为在新版本中,如果搜索结果不止一个,findElement就会抛出一个Exception。
我会把这写在评论里,但是我没有足够的声誉:/

xbp102n0

xbp102n02#

可能的原因:

  • 当前屏幕中的多个EditText。

请尝试以下操作:

解决方案1:

List<WebElement> editText = driver.findElements(By.className("android.widget.EditText"));
editText.get(0).sendKeys("123");

0 -编辑文本的索引

解决方案2:

使用任何其他定位策略,如Xpath。

ev7lccsx

ev7lccsx3#

也许您可以尝试使用WebDriverWait对象等到元素可见或启用?

7vux5j2d

7vux5j2d4#

尽可能避免使用sleep,尝试使用WAIT命令。即使元素已经在屏幕上,也不要等待已经确定的时间就进入睡眠状态。在等待命令的情况下,只要元素一出现,操作就已经执行,这将大大减少代码的执行时间。

wztqucjr

wztqucjr5#

我的问题是我使用的应用程序路径。如果你正在使用配置文件,请确保从设备中单独声明应用程序。如果没有,请确保“应用程序”功能具有正确的路径。下面是我的配置文件中的代码,例如

devices_by_ids = {
"platformName": "Android",
"appium:DEVICE ADB ID": {
    "android_version": "13",
    "device_name": "google_Pixel_5a",
    "DEVICE ADB ID": "DEVICE ADB ID",
    "port":"4723",
    "autoGrantPermissions": "true",
},
"appium:app": "YOUR APP PATH",
"appium:appWaitActivity": "*"

}

相关问题