Java 如何减少appium中元素搜索的默认时间

Java 如何减少appium中元素搜索的默认时间,java,selenium-webdriver,appium,Java,Selenium Webdriver,Appium,我刚刚注意到,当元素不存在时,Appium&Selenium至少需要2分钟才能找到元素 我想减少搜索的时间 代码是: if(!driver.findElements(By.id(AppConstants.notificationcount)).isEmpty()) { // DO SOMETHING } else { System.out.println("No Element available"); } 现在大部分时间我的元素不可用,所以我希望appium检查它并

我刚刚注意到,当元素不存在时,Appium&Selenium至少需要2分钟才能找到元素

我想减少搜索的时间

代码是:

 if(!driver.findElements(By.id(AppConstants.notificationcount)).isEmpty())
{

  // DO SOMETHING

}
else
{

   System.out.println("No Element available");    
}

现在大部分时间我的元素不可用,所以我希望appium检查它并快速重定向到其他部分,但这需要很长时间,有解决方案吗?

检查的更快方法是将元素存储在列表中,然后检查它是否为空

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
}
List elements=driver.findElements(By.id(“AppConstants.notificationcount”);
if(elements.isEmpty()){
System.out.println(“无可用元素”);
}否则{
元素。获取(0)。单击();//如果存在,请单击该元素
}

希望这对您有所帮助。

您是否检查了您的隐式等待时间?
默认值为0,但可能您正在将其设置为>2分钟的值:

driver.manage().timeouts().implicitlyWait(timeInSeconds, TimeUnit.SECONDS);
如果隐式等待时间大于0,并且正在搜索具有

driver.findElements(...);
但是您的元素不存在,那么Selenium将等待整个指定时间


当至少找到一种元素时,Selenium不会等待。在这种情况下,它将搜索页面一次,并立即返回找到的元素列表

因此,findElements()对于检查元素是否存在没有任何限制,但是仅适用于在指定非常低的隐式等待时间(或默认值0)时检查元素是否不存在


如果出于任何原因,您绝对需要隐式等待时间>0,那么您可以创建自己的方法,如中所示处理此问题


在您的情况下,您可以在发布代码之前将隐式等待时间设置为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,则只需在代码后将其设置回原始值。

谢谢您的建议,但我想知道隐式等待的确切位置?因为我注意到,一旦selenium开始查找元素,它就不再考虑等待和长时间搜索元素了。正如我在回答中所说的,这取决于Java是否考虑了等待时间,因为您使用的是“findElements”在调用此方法之前,需要将implicitwait设置为0!->更新了我的答案是的,我也已经这样做了,它工作正常,但我的问题是搜索元素所需的时间。每当我使用
findelements
时,它都会长时间搜索元素。我想缩短搜索时间。