web-dev-qa-db-ja.com

アノテーション「@FindBy」の用途は何ですか?

誰かが注釈について私に説明できますか@FindBy in WebDriver

どこで、なぜ使用されるのですか?

9
mra419

ページファクトリを使用してページオブジェクトをサポートするときに、ロケーターの構築を支援することです。

PageFactory Wikiページ

ただし、ロケーターは柔軟性が高く、StaleElementExceptionに遭遇することを回避する傾向があるため、WebElementsではなくByオブジェクトとしてロケーターを格納する方が便利であることがわかりました。

By myLocator = By.id("idOfYourElement")

の代わりに

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

このようにして、要素がないことを表明するときにロケーターを使用したり、ExpectedConditionsヘルパーで使用したりすることもできます。

15
el roso

引用できますか API-documentation

ページオブジェクトのフィールドをマークして、要素を見つけるための代替メカニズムまたは要素のリストを示すために使用されます。 _PageFactory#proxyElement_と組み合わせて使用​​すると、ユーザーはPageObjectをすばやく簡単に作成できます。

したがって、PageObjectパターンを使用する場合は、このアノテーションをクラスメンバーに追加し、オブジェクトの初期化中にWebDriverが適切なWebElementsを自動的に挿入します(PageFactory.initElements()の場合)。と呼ばれる)。

このリンクをたどって、 PageObjectパターンと_@FindBy_アノテーションの使用法 についてさらに例を読むことを強くお勧めします。

11
Slava Semushin

Pagefactory を使用して、次のようにすることもできます。

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

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

さて、How。に関しては、次のことができます。

  1. クラス名
  2. CSS
  3. ID
  4. ID_OR_NAME
  5. LINK_TEXT
  6. 名前
  7. PARTIAL_LINK_TEXT
  8. タグ名
  9. XPATH
  10. クラス

または、独自のDOM SearchとXpathを使用することもできます。これは、WebDriver APIの外部にありますが、機能するはずです。

3
kamal

PageFactoryクラスの助けを借りて、アノテーションを使用します@FindByWebElementsを検索します。 initElementsメソッドを使用してWeb要素を初期化します。 @FindByは、tagName、partialLinkText、name、linkText、id、css、className、xpathを属性として受け入れることができます。

@FindByアノテーションは、単一の基準を使用して1つ以上のWebElementを検索します。たとえば、同じクラス属性を持つすべての要素を識別するために、次の識別を使用できます。

@FindBy(how = How.CLASS_NAME, using = "classname")
private List<WebElement> singlecriterion;`enter code here`
0
The man