Как реализовать AjaxElementLocatorFactory через Selenium и Page Factory?

Я использовал Pagefactory для настройки всех своих страниц в Selenium. Дело в том, что тест является динамическим в том смысле, что некоторые элементы существуют только в некоторых тестах. Из моего понимания AjaxElementFactory работает так:

PageFactory.initElements(new AjaxElementLocatorFactory(driver,5), this);

@FindBy(id="ctl00_DefaultContent_RbIndividual")
WebElement OwnershipIndividual;

public void sendString(String stuff){
    OwnershipIndividual.sendKeys(stuff);
}

Но если элемент OwnershipIndividual не будет найден в течение 5 секунд, он выдаст исключение NoSuchElementException. Моя проблема в том, что, хотя я установил тайм-аут на 5 секунд, он все равно занимает 50-60 секунд. Это почему?

2 ответа

Возможно, вы также предоставили неявное ожидание вашему драйверу, которое суммируется с тайм-аутом ur AjaxElementLocatorFactory.

Я не вижу никакой проблемы как таковой в ваших испытаниях кода.

AjaxElementLocatorFactory

AjaxElementLocatorFactoryявляется концепцией отложенной загрузки в шаблоне Page Factory, чтобы идентифицировать WebElements, только когда они используются в какой-либо операции, т.е. timeOut для WebElement может быть назначен классу страницы Object с помощью AjaxElementLocatorFactory,

  • Синтаксис:

    PageFactory.initElements(new AjaxElementLocatorFactory(driver, TimeoutValue), this);
    
  • Пример:

    PageFactory.initElements(new AjaxElementLocatorFactory(driver,5), this);
    

Приведенный выше код будет ожидать максимум 5 секунд, пока не загрузятся элементы, указанные в аннотациях. Если элемент не найден в данный промежуток времени, он будет выбрасывать NoSuchElementException,

Так, согласно вашему блоку кода, если элемент не найден после 5 seconds, NoSuchElementException должен быть брошен.


Под капотом

AjaxElementLocatorFactory создает AjaxElementLocator, используя SlowLoadableComponent, который, возможно, не завершил загрузку, когда load() возвращается. После звонка load(), isLoaded() Метод должен продолжать сбой до полной загрузки компонента.

Другие вопросы по тегам