2012-01-27 4 views

答えて

11

API-documentationを引用できますか?要素または要素のリストの場所を特定するため代替メカニズムを示すために、Pageオブジェクトのフィールドをマークするために使用

PageFactory#proxyElementと組み合わせて使用​​すると、ユーザーはPageObjectsをすばやく簡単に作成できます。だから、

あなたがPageObjectパターンを使用する場合は、クラスのメンバーにこの注釈を追加し、WebDriverは、自動的に(PageFactory.initElements()と呼ばれる)オブジェクトの初期化時に、それに該当するWebElement Sを注入。

このリンクに従うことを強くお勧めします。詳細についてはPageObject pattern and @FindBy annotations usageをお読みください。

+0

ご回答ありがとうございます。だから、別の質問があります...それは動的にロケータを変更する要素に使用されますか? – mra419

+0

@ user1163375「ロケータを動的に変更する」とはどういう意味ですか? –

+0

私の理解は「@FindBy」です。注釈は、要素IDがWebアプリケーション内で動的に変化しているときに使用されます。間違っていると私を修正してください。 – mra419

11

私は私ではなくオブジェクトによってとしてあなたロケータを保存することがより有用見つけることを発見していますが、あなたのページをサポートするためのページ工場を使用して

PageFactory Wiki Page

オブジェクトの場合には、ロケータの建設を支援するためですWebElementsよりも柔軟性があり、StaleElementExceptionに陥ることはありません。代わりに

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

あなたも要素がないことを主張したときに、あなたのロケータを使用するか、ExpectedConditionsヘルパーでそれを使用することができるこの方法の

By myLocator = By.id("idOfYourElement") 

+0

Byオブジェクトの代わりに誰かが@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を使用することができますが、それは動作するはずです。