Appium:"使用给定的搜索参数无法在页面上找到元素"错误

时间:2014-08-07 10:36:43

标签: android selenium appium

我是Appium的新手,并一直在尝试自动化Android的转换计算器应用。我在尝试查找EditText元素时收到错误“org.openqa.selenium.NoSuchElementException:使用给定的搜索参数无法在页面上找到元素”。使用Appium v​​er 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");

即使是ID的findElement也无效。请告诉我这里我做错了什么,或者我是否需要提供更多细节。

4 个答案:

答案 0 :(得分:4)

我会用 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);代替Thread.sleep(5000)

尝试使用较新版本的Appium,我已经得到了很大的改进。您可以在此处下载最新版本的Appium和Appium客户端:http://appium.io/downloads.html

但要小心,因为在较新版本中,如果搜索结果多于一个,则findElement会抛出异常。


我会在评论中写这个,但我的声誉不够:/

答案 1 :(得分:2)

可能的原因:

  • 当前屏幕中的多个EditText。

请尝试以下操作:

<强>解决方法1:

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

0 - EditText的索引

<强>溶液2:

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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