Selenium의 페이지 개체 모델 및 PageFactory
3360 단어 seleniumtestingpagefactorypom
✒️ 페이지 개체 모델이란 무엇입니까?
POM은 웹 요소를 저장하기 위해 Object Repository를 생성하는 Selenium의 디자인 패턴입니다. POM에서는 개체 저장소와 테스트 클래스의 분리 원칙을 따릅니다. 각 개체 저장소에는 해당 웹 페이지의 요소만 포함됩니다.
✒️ POM의 장점은 무엇인가요?
✔️ 손쉬운 유지보수: POM은 모든 페이지가 분리되어 있어 어떤 웹 페이지에 변경 사항이 있을 경우 쉽게 식별하고 변경할 수 있습니다. 개체 저장소의 변경 사항은 다른 곳의 코드에 영향을 주지 않습니다.
✔️ 재사용성: 단일 객체 저장소를 다양한 TestCase에 사용할 수 있습니다. 또한 Selenium의 동일한 POM을 기능 테스트 및 승인 테스트와 같은 다양한 유형의 테스트와 동시에 통합할 수 있습니다.
✔️ 가독성: 테스터는 특정 웹 페이지에서 수행될 작업을 쉽게 식별할 수 있습니다.
⚠️ 확인 또는 어설션은 Object Repository에 속하면 안 됩니다. ⚠️
✒️ Selenium의 PageFactory는 무엇입니까?
PageFactory는 POM을 구현하는 데 매우 최적화된 방법입니다. 일반 POM의 기능을 확장하는 Selenium WebDriver에서 제공하는
class
입니다.1️⃣
@FindBy
: 웹 요소를 선언하기 위해 Page Factory에서 사용되는 주석입니다. @FindBy 주석은 다음을 지원합니다. id, name, className, css, tagName, linkText, partialLinkText, xpath
. 다음은 @FindBy-를 사용하여 webelement를 선언한 예입니다.@FindBy(class="elementClass")
WebElement element;
2️⃣
initElements()
: Page Factory 클래스의 static
메서드로, 주어진 클래스의 인스턴스를 인스턴스화합니다. 또한 @FindBy 주석으로 정의된 모든 웹 요소를 초기화하는 데 사용됩니다.public RegistrationPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
3️⃣ AjaxElementLocatorFactory:
AjaxElementLocatorFactory
는 PageFactory의 Lazy Loading 개념입니다. 특히 Ajax가 많은 애플리케이션에서 사용자 작업을 기반으로 런타임 중에 변경되는 동적 요소를 처리하는 데 사용됩니다. AjaxElementLocatorFactory를 사용하여 웹 요소에 대해 타임아웃을 설정할 수도 있습니다.AjaxElementLocatorFactory ajaxFactory = new AjaxElementLocatorFactory(driver, 30);
PageFactory.initElements(ajaxFactory, this);
✒️ PageFactory의 기본 동작:
@FindBy
를 사용하여 선언된 웹 요소가 한 번에 초기화되지만 브라우저 DOM에서 검색되지 않음@CacheLookup
. ✒️ POM과 PageFactory의 차이점:
페이지 개체 모델
페이지팩토리
페이지 개체 모델은 디자인 패턴입니다.
PageFactory는 POM 구현을 제공하는
class
입니다.POM에서는 모든 페이지 개체의 개별 초기화가 필요합니다.
PageFactory에서 모든 페이지 개체는 initElements() 메서드를 사용하여 한 번에 초기화됩니다.
By
를 사용하여 웹 요소 정의@FindBy
주석을 사용하여 웹 요소를 정의합니다.POM은 지연 초기화를 지원하지 않으므로 최적이 아닙니다.
지연 초기화를 지원하며 최적입니다.
POM이 처리할 수 없습니다
StaleElementReferenceException
.오래된 요소가 호출될 때마다 검색하여 효율적으로 처리합니다
StaleElementReferenceException
.✒️ @CacheLookUp 주석:
@CacheLookUp
주석은 일반적으로 변경되지 않는 요소에 사용되는 반복 검색 대신 웹 페이지에 처음 도착할 때 WebElement의 캐시를 유지하는 데 사용됩니다.페이지 개체 저장소에서 WebElement가 호출될 때마다 findElement() REST 요청이 WebDriver로 전송됩니다. 이것은 페이지 로딩 후 웹 요소의 최신 버전을 찾는 Pagefactory의 중요한 이점 중 하나를 충족합니다. 그러나 프로세스가 느리고 시간 소모적입니다(분명히 많이!). 여기에서
@CacheLookUp
가 문제를 해결합니다.✒️ @CacheLookUp을 사용하지 않는 경우는 언제입니까?
본질적으로 동적인 요소에는 적합하지 않습니다. AJAX 기반 애플리케이션의 경우 사용자 상호 작용에 따라 DOM이 자주 변경되는 경우 작동하지 않을 수 있습니다. @CacheLookUp 주석을 사용하면 WebDriver에서 StaleElementExceptions가 발생할 수 있습니다.
Reference
이 문제에 관하여(Selenium의 페이지 개체 모델 및 PageFactory), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zinnun/page-object-model-pagefactory-in-selenium-3j4f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)