2017-09-19 64 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