【问题标题】:Selenium check element presence if using FindBy annotation如果使用 FindBy 注释,Selenium 检查元素是否存在
【发布时间】:2020-02-18 14:09:07
【问题描述】:

尝试使用@FindBy 注释我的感觉是没有完美的方法来检查元素的存在。

herehere 也有类似的讨论,但我只看到解决方法,没有类似

@FindBy (id = "abc")
private WebElement TestElement;

if (TestElement.isPresent) {...};

我找到了@FindBys 的解决方案,但是这样我必须为每个要检查DOM 中存在的元素实现一个额外的@FindBys?不是很好。

每个使用 ExpectedConditions.presenceOf... 或任何使用 FindElement 的替代解决方案都需要定位器作为参数而不是 WebElement,对吗?

当然,我可以使用例如构建解决方法。 ExpectedConditions.elementToBeClickable(WebElement) 在 try/catch 中并引发 org.junit.jupiter.api.Assertions.fail,但这不是真正的 DOM 检查。

对我来说,使用经典的 By 页面对象定义(例如 private By searchInput = By.xpath("\\input[@class='input_search']");)比使用 @FindBy 更灵活。使用@FindBy 我总是处理 WebElement 本身,之前没有机会检查存在,对吧?

使用@FindBy 检查页面对象上下文中元素的DOM 存在的最佳实践解决方案是什么?还是为了安全起见,我应该留在By

【问题讨论】:

  • 我不知道为什么ExpectedConditions.presenceOf... 不起作用。无论如何,您都需要一个定位器来检查您要检查的元素。我知道我遗漏了一些东西,但问题并不清楚。

标签: selenium findby


【解决方案1】:

这可能不是最好的解决方案,但您可以使用 findBy 并返回一个列表:

List<WebElement> TestElement = driver.findElements(By.id(...));

并且每次(在一个while循环中)检查列表elelement的大小,看它是否不为空。

【讨论】:

  • 当然,但为此我再次需要 ID。我的问题是,我可以使用 FindBy,因此在任何地方都没有 ID 或 xpath 作为定位器。
  • 没有定位器你应该找到什么?
  • .. 主要问题是:我能否在没有定位器的情况下工作(除了 FindBy 声明中的那个)并且在检查元素是否存在方面没有冗余代码。
猜你喜欢
  • 2012-03-22
  • 1970-01-01
  • 2021-07-08
  • 2018-01-23
  • 2021-05-17
  • 2016-08-05
  • 2013-05-06
  • 1970-01-01
  • 2013-10-30
相关资源
最近更新 更多