2012-01-27 6 views

답변

11

API-documentation을 인용 할 수 있습니까? 요소 또는 요소의 목록을 특정하는 대체 메커니즘을 나타 내기 위해 Page 개체에 필드를 표시하는 데 사용

. PageFactory#proxyElement과 함께 사용하면 사용자가 PageObjects를 쉽고 빠르게 만들 수 있습니다. 당신이 PageObject 패턴을 사용하는 경우

그래서, 당신은 클래스 멤버에이 주석을 추가하고 (PageFactory.initElements() 호출하면) WebDriver 자동으로 개체 초기화 중에 적절한 WebElement의 주입.

더 많은 예제를 보려면이 링크를 읽고 PageObject pattern and @FindBy annotations usage을 읽어 보시기 바랍니다.

그것은 페이지 공장을 사용할 때 찾을 것을 당신의 페이지

PageFactory Wiki Page

그러나 내가 발견하고있어 개체 지원하기 위해 로케이터의 건설을 지원하기 위해입니다
+0

답변 해 주셔서 감사합니다. 그래서, 나는 또 다른 질문이 있습니다 ... 그것은 동적으로 요소를 변경하는 요소에 사용됩니까? – mra419

+0

@ user1163375 '로케이터를 동적으로 변경하는 중'이라고 말하면 무엇을 의미합니까? –

+0

내 이해가 "@FindBy"어노테이션은 요소 ID가 웹 응용 프로그램에서 동적으로 변경 될 때 사용됩니다 .... 잘못된 경우 수정하십시오. – mra419

11

것이 아니라 객체에 의해로 로케이터를 저장하는 것이 더 유용 WebElements보다 유연하며 StaleElementException을 피하는 경향이 있습니다. 대신

@FindBy(id = "idOfYourElement") 
WebElement myLocator; 

당신은 또한 요소의 부재를 주장 할 때 로케이터를 사용하거나 ExpectedConditions 도우미에서 사용할 수있는이 방법의

By myLocator = By.id("idOfYourElement") 

.

+0

왜 Bytes 객체 대신 @FindBy를 사용하는지 이해하는 데 많은 어려움을 겪고 있습니다. – stuart

+0

@elroso 주석을 제거 할 때 PageFactory.initElements (driver, page) 메서드를 사용할 수 있습니까? 감사합니다. –

+0

@FindBy 대신 By를 사용하는 것에 대한 좋은 설명. 감사 :) –

3

또한 Pagefactory을 사용하고, 같은 것을 가질 수 있습니다. 방법에 관해서는,

@FindBy(how = How.NAME, using = "logonName") 
private WebElement logonNameField; 

@FindBy(how = How.NAME, using = "password") 
private WebElement passwordField; 

지금을, 당신은 할 수 있습니다 :

  1. CLASS_NAME
  2. CSS
  3. ID
  4. ID_OR_NAME
  5. LINK_TEXT
  6. NAME
  7. PARTIAL_LINK_TEXT
  8. TAG_NAME
  9. XPATH
  10. 클래스

또는 당신은 WebDriver의 API 이외의 것이 자신의 DOM 검색 플러스 XPath는, 사용할 수 있지만 작동합니다.