2017-09-19 90 views
-1

據我所知,pagefactory中的FindBys Annotation返回滿足裏面提到的所有條件的元素。下面的代碼總是返回0個元素。FindBys和列表<WebElement>總是返回空列表

同樣,如果我使用具有相同ID和Xpath屬性的FindAll註釋,它將返回2個webelements。任何人都可以幫助我理解結果。

\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,我不確定,但我猜測它正在執行兩個搜索,每個返回一個元素。搜索不夠聰明,認識到它們都是相同的元素。你爲什麼要做這兩個搜索?他們將返回相同的東西。 – JeffC

回答

1

你的理解是錯誤的。

documentation for @FindBy說:

用來標記在一個頁面對象的字段來指示查找在org.openqa.selenium.support描述應該使用一系列@FindBy標籤鏈中的。 pagefactory.ByChained

此外,documentation for ByChained說:

使用一系列其他查找機制來查找文檔中的元素。該類將按順序查找與每個定位符匹配的所有DOM元素,例如, driver.findElements(new ByChained(by1, by2))將找到匹配by2並出現在與by1匹配的元素下的所有元素。

因此,在您的示例中,您正在通過XPath查找具有特定ID的元素,然後使用相同的ID查找其子元素......當然這不會返回任何內容。

+0

謝謝@SiKing。你能否介紹一下findAll方法。 –

+0

@ARJUNU'@ FindAll'的工作原理類似於OR條件:http://seleniumhq.github.io/selenium/docs/api/java/index.html?org/openqa/selenium/support/FindAll.html – SiKing