为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

喵喔喔 2023-02-23 16:42:03
我需要检查 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 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

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



查看完整回答
反对 回复 2023-02-23
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

根据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));

}


查看完整回答
反对 回复 2023-02-23
  • 2 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信