我刚注意到Appium&当元素不存在时,Selenium需要至少2分钟才能找到元素。
我希望缩短搜索时间。
代码是:
if(!driver.findElements(By.id(AppConstants.notificationcount)).isEmpty())
{
// DO SOMETHING
}
else
{
System.out.println("No Element available");
}
现在大部分时间我的元素都不可用,所以我想让appium检查并快速重定向到ELSE部分,但这需要很长时间,任何解决方案?
答案 0 :(得分:2)
您是否检查了隐含等待时间?
它默认为0,但也许您将其设置为某个值> gt; 2分钟:
driver.manage().timeouts().implicitlyWait(timeInSeconds, TimeUnit.SECONDS);
如果您的隐式等待时间大于0并且您正在搜索带
的元素driver.findElements(...);
但你的元素不存在,然后 Selenium将等待整个指定的时间!
Selenium不会等待,当找到至少一个元素时。在这种情况下,它将搜索页面一次并立即返回找到的元素列表。
因此,findElements()无限制地检查元素是否存在,但仅在指定非常低的隐式等待时间(或默认值0)时检查不存在。
如果你绝对需要一个隐含的等待时间>无论出于何种原因,您都可以创建自己的方法来处理此问题,如this solution。
在您的情况下,您可以在发布的代码之前将隐式等待时间设置为0:
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
// then follows your code:
if(!driver.findElements(By.id(AppConstants.notificationcount)).isEmpty())
{
// DO SOMETHING
}
else
{
System.out.println("No Element available");
}
如果你需要在其他地方使用0以外的隐式等待时间,那么只需在你的代码之后将其设置回原始值。
答案 1 :(得分:1)
更快捷的检查方法是将元素存储在列表中,然后检查它是否为空
List<WebElement> elements = driver.findElements(By.id("AppConstants.notificationcount"));
if (elements.isEmpty()) {
System.out.println("No Element available");
}else{
elements.get(0).click();//if present click the element
}
希望这会对你有所帮助。