检查WebElement对象中是否存在元素

时间:2019-06-29 07:10:29

标签: java selenium

我需要检查Java Selenium页面中是否存在元素。不幸的是,所有关于搜索的解释都是使用FindElements(By)来完成的,但是我有一种将WebElement直接传递给方法的结构,因为我的元素已经由PageFactory发送了。

所以我的结构如下:

public static void verifyElementPresentStatus(WebElement targetElement, String elementName) {
    Boolean elementPresent = MISSING PART
    StepLogger.subVerification(elementName + " should be present");
    Assert.assertTrue(
            elementPresent,
            ValidationHelper.getPresentValidation(elementName)
    );
}

并调用类似方法

ExpectationHelper.verifyElementPresentStatus(
            Pages.HomePage().homeHeader,
            Pages.HomePageConstants().pageHeaderText
    );

有人知道这样做吗?

2 个答案:

答案 0 :(得分:1)

您不能编写接受WebElement作为参数并检查在所有情况下是否存在的方法。这是因为唯一可以引用一个不存在的WebElement对象的情况是,如果该对象先前存在,然后又从DOM中删除(“陈旧元素”)。为了确定元素是否首次存在,只能通过接受By参数代替WebElement来实现。这样,您可以使用findElements并检查count> 0。

答案 1 :(得分:0)

根据WebElement接口的documentation,其所有方法调用

  

将进行新鲜度检查以确保该元素   参考仍然有效。这实质上决定了是否   元素仍附加到DOM。如果此测试失败,则   抛出StaleElementReferenceException,并且以后对此的所有调用   实例将失败。

由于您收到的WebElement未经任何验证,因此请考虑执行中性方法调用(无任何副作用)来检查元素StaleElementReferenceException。例如,您可以调用getSize()方法。您的方法逻辑应该看起来像这样。

public static void verifyElementPresentStatus(WebElement targetElement, String elementName) {
  Boolean elementPresent = true;
  try {
    elementPresent = targetElement.getSize();
  } catch (StaleElementReferenceException e) {
    elementPresent = false;
  }
  StepLogger.subVerification(elementName + " should be present");
  Assert.assertTrue(elementPresent, ValidationHelper.getPresentValidation(elementName));
}