当前位置: 代码迷 >> java >> 如何在appium中减少元素搜索默认时间
  详细解决方案

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

热度:62   发布时间:2023-07-25 20:06:49.0

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

我想缩短搜索时间。

代码是:

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

  // DO SOMETHING

}
else
{

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

现在大部分时间我的元素都不可用,所以我想让appium检查并快速重定向到ELSE部分,但这需要很长时间,任何解决方案?

你检查了你的隐含等待时间吗?
它默认为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之外的隐式等待时间,那么只需在你的代码之后将其设置回原始值。

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

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
}

希望这对你有所帮助。