Android 附属品:“;使用给定的搜索参数在页面上找不到元素;错误

Android 附属品:“;使用给定的搜索参数在页面上找不到元素;错误,android,selenium,appium,Android,Selenium,Appium,我是Appium的新手,一直在尝试将Android的转换计算器应用程序自动化。我在尝试查找EditText元素时遇到错误“org.openqa.selenium.NoSuchElementException:使用给定的搜索参数在页面上找不到元素”。使用Appium 1.0.0版和Android 4.3 以下是我的代码: List<WebElement> textViews = driver.findElements(By.className("android.widget.TextV

我是Appium的新手,一直在尝试将Android的转换计算器应用程序自动化。我在尝试查找EditText元素时遇到错误“org.openqa.selenium.NoSuchElementException:使用给定的搜索参数在页面上找不到元素”。使用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");
List TextView=driver.findElements(By.className(“android.widget.TextView”);

对于(i=0;i也许您可以尝试等待,直到元素可见或使用WebDriverWait对象启用为止?

我将使用
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
而不是
Thread.sleep(5000)

尝试使用较新版本的Appium,我已经改进了很多。您可以在此处下载最新版本的Appium和Appium客户端:

但是要小心,因为在较新的版本中,如果搜索结果不止一个,findElement就会抛出异常



我会写在评论中,但我没有足够的声誉://p>可能的原因:

List<WebElement> editText = driver.findElements(By.className("android.widget.EditText"));
editText.get(0).sendKeys("123");
  • 当前屏幕中有多个编辑文本
请尝试以下操作:

解决方案1:

List<WebElement> editText = driver.findElements(By.className("android.widget.EditText"));
editText.get(0).sendKeys("123");
List editText=driver.findElements(By.className(“android.widget.editText”);
editText.get(0.sendKeys(“123”);
0-编辑文本的索引

解决方案2:

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

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

尽量避免使用sleep,尝试使用WAIT命令。 即使元素已经在屏幕上,也可以在不等待已确定的时间的情况下进行睡眠。
在wait命令的情况下,只要元素出现,操作就已经执行,这将大大缩短执行时间。

NoSuchElementException
通常由于以下几个原因而发生。1.元素位于
iframe
内。2.元素运行缓慢oad.我在使用带量角器的appium时也有同样的问题,我是否也要添加睡眠(10000);例如?我在Mac中使用最新版本的appium带ipad模拟器使用线程。不建议使用睡眠,您是否有幸使用
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
方法?