猿问

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

我需要检查 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

    );

任何人都知道这样做的方法吗?


喵喔喔
浏览 150回答 2
2回答

慕的地10843

您不能编写接受 WebElement 作为参数的方法,并检查它是否在所有情况下都存在。这是因为您可以引用不存在的 WebElement 对象的唯一情况是它以前存在,然后从 DOM 中删除(“陈旧元素”)。为了第一次确定元素是否存在,您只能通过接受 By 参数而不是 WebElement 来做到这一点。这样您就可以使用 findElements 并检查 count > 0。

慕虎7371278

根据WebElement 接口的文档,其所有方法调用将进行新鲜度检查以确保元素引用仍然有效。这实质上决定了该元素是否仍然附加到 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));}
随时随地看视频慕课网APP

相关分类

Java
我要回答