2017-09-19 10 views
-1

私の理解では、pagefactoryのFindBys Annotationは、内部で述べたすべての条件を満たす要素を返します。以下のコードは常に0個の要素を返します。FindBysとList <WebElement>は常にnullリストを返す

同様に、同じIDとXpath属性を持つFindAll注釈を使用している場合、2つのWeb要素が返されます。誰もが結果を理解するのを助けることができます。

\t @FindBys 
 
\t (\t \t \t 
 
\t \t \t { 
 
\t \t \t \t @FindBy(xpath="//*[@id='ctl00_ctl00_divWelcome']"), 
 
\t \t \t \t @FindBy(id="ctl00_ctl00_divWelcome") 
 
\t \t \t \t 
 
\t \t \t } 
 
\t \t \t) 
 
\t public List<WebElement> allElementsInList;

+0

ページへのリンクなしで0要素が返されている理由はわかりません。 IDが存在しないか、表示されていないか、またはページロードに遅延があり、0を返す可能性があります。FindAllが2を返す理由はわかりませんが、2つの検索を実行していると推測します。各要素は1つの要素を返します。検索は、両方が同じ要素であることを認識するほどスマートではありません。とにかく、これらの2つの検索を行う理由は何ですか?彼らは同じことを返すだろう。 – JeffC

答えて

1

あなたの理解が間違っています。

documentation for @FindBy

は言う:org.openqa.selenium.supportで説明したようにチェーンに @FindByタグ のシリーズを使用する必要があること、ルックアップを示すために、Pageオブジェクトのフィールドをマークするために使用

。さらに

をpagefactory.ByChained、documentation for ByChainedは言う:

一連の他のルックアップを使用して、ドキュメント内の要素の位置を特定するためのメカニズム。このクラスは、各ロケータに順番に一致するすべてのDOM要素を検索します(例: driver.findElements(new ByChained(by1, by2))は、by2と一致し、by1と一致する要素の下に表示されるすべての要素を検索します。同じIDで

だからあなたの例では、あなたが特定のIDを持つのXPathによって要素を探している、とその子要素は...その、もちろん、何も返さするつもりはありません。

+0

@SiKingありがとうございます。 findAllメソッドにもいくつかの光を当ててください。 –

+0

@ARJUNU '@ FindAll'は、OR条件のように機能します。http://seleniumhq.github.io/selenium/docs/api/java/index.html?org/openqa/selenium/support/FindAll.html – SiKing

関連する問題