使用appium + selenium + java。尝试等待具有特定文本的移动元素。
在移动应用程序中,我登录到页面,并且在登录期间有带有文本的 android.widget.TextView(0) ,所以我正在检查此文本,如果显示带有不同文本的新元素 android.widget.TextView(0) 那么我可以继续其他步骤。当新元素出现时旧元素不存在
为此,使用以下代码,但我可以看到
Cached elements 'By.clazz: android.widget.TextView' do not exist in DOM anymore
代码:
public static MobileElement waitForElementText(AndroidDriver driver, int index, String text, int timeout) {
List<MobileElement> mobileElement = null;
do {
mobileElement = new WebDriverWait(driver, timeout)
.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.className("android.widget.TextView")))
.stream().map(element -> (MobileElement) element).collect(Collectors.toList());
System.out.println("waiting for: " + text + " found: " + mobileElement.get(index).getText());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} while (mobileElement.get(index).getText() != text);
System.out.println(mobileElement.get(index).getText());
return mobileElement.get(index);
}
有什么想法我做错了什么吗?
Cached elements 'By.clazz: android.widget.TextView' do not exist in DOM anymore
是因为当您尝试获取文本时,该元素不存在于页面上。因此,不应将 while
条件放在检查文本上,而应将条件放在元素列表的大小上。当页面上不存在该元素时,大小将变为零。
将 while 条件更改为:
while (mobileElement.size()>0);