Как уменьшить время поиска элементов по умолчанию в appium

Я только что заметил, что Appium & Selenium занимает не менее 2 минут, чтобы найти элемент, когда элемента нет.

Я хочу сократить это время на поиск.

Код:

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

  // DO SOMETHING

}
else
{

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

Теперь большую часть времени мой элемент недоступен, поэтому я хочу, чтобы appium проверил его и быстро перенаправил на ELSE часть, но это занимает много времени, есть решение?


person Helping Hands    schedule 07.08.2015    source источник


Ответы (2)


Вы проверили свое неявное время ожидания?
По умолчанию оно равно 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 в другом месте, просто установите исходное значение после вашего фрагмента кода.

person drkthng    schedule 08.08.2015
comment
Спасибо за ваше предложение, но я хочу знать, где именно я должен поставить неявное ожидание? Потому что я заметил, что как только селен начинает находить элемент, он не рассматривает ожидание и поиск элемента в течение длительного времени. - person Helping Hands; 10.08.2015
comment
как я сказал в ответе, это зависит от того, как вы пытаетесь найти элемент, если Java учитывает время ожидания или нет в вашем случае, поскольку вы используете findElements, вам нужно установить неявное ожидание равным 0, прежде чем вызывать этот метод! -› обновил мой ответ - person drkthng; 10.08.2015

Более быстрый способ проверки - сохранить элементы в списке, а затем проверить, пуст ли он.

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
}

Надеюсь, это поможет вам.

person Vicky    schedule 07.08.2015
comment
Да, я уже сделал это, он работает нормально, но моя проблема требует времени для поиска элемента. Всякий раз, когда я использую findelements , он долго ищет элемент. Я хочу сократить время поиска. - person Helping Hands; 10.08.2015