Как реализовать 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()
Метод должен продолжать сбой до полной загрузки компонента.