我是Appium的新手,并一直在尝试自动化Android的转换计算器应用。我在尝试查找EditText元素时收到错误“org.openqa.selenium.NoSuchElementException:使用给定的搜索参数无法在页面上找到元素”。使用Appium ver 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也无效。请告诉我这里我做错了什么,或者我是否需要提供更多细节。
答案 0 :(得分:4)
我会用
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
代替Thread.sleep(5000)
。
尝试使用较新版本的Appium,我已经得到了很大的改进。您可以在此处下载最新版本的Appium和Appium客户端:http://appium.io/downloads.html
但要小心,因为在较新版本中,如果搜索结果多于一个,则findElement会抛出异常。
我会在评论中写这个,但我的声誉不够:/
答案 1 :(得分:2)
可能的原因:
请尝试以下操作:
<强>解决方法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 命令。 即使元素已经在屏幕上,也不等待已确定的时间进入睡眠状态。 在等待命令的情况下,只要元素出现,动作就会被执行,这将大大减少代码的执行时间。