【问题标题】:FindBys and List<WebElement> always return null listFindBys 和 List<WebElement> 总是返回空列表
【发布时间】:2017-09-19 12:51:31
【问题描述】:

据我了解,pagefactory 中的 FindBys Annotation 会返回满足里面提到的所有条件的元素。下面的代码总是返回 0 个元素。

同样,如果我使用具有相同 id 和 Xpath 属性的 FindAll 注释,它会返回 2 个 web 元素。任何人都可以帮助我理解结果。

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

【问题讨论】:

  • 我们无法确定为什么它会返回 0 个没有页面链接的元素。 ID可能不存在,不可见,或者页面加载延迟导致它返回0。至于FindAll为什么返回2,我不确定,但我猜它正在执行两个搜索,每个返回一个元素。搜索不够聪明,无法意识到它们都是相同的元素。你为什么要做这两个搜索呢?他们将返回相同的东西。

标签: java selenium selenium-webdriver pageobjects page-factory


【解决方案1】:

你的理解是错误的。

documentation for @FindBy 说:

用于标记页面对象上的字段以指示查找应使用一系列@FindBy标签链中如org.openqa.selenium.support.pagefactory.ByChained中所述

此外,documentation for ByChained 说:

用于使用一系列其他查找在文档中定位元素的机制。此类将按顺序查找与每个定位器匹配的所有 DOM 元素,例如driver.findElements(new ByChained(by1, by2)) 将找到所有匹配 by2 的元素,并出现在匹配 by1 的元素下。

因此,在您的示例中,您通过 XPath 查找具有特定 ID 的元素,然后查找具有相同 ID 的子元素......当然,这不会返回任何内容。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 2017-04-13
相关资源
最近更新 更多