【问题标题】:How to identify new element appear on the exixting webpage using selenide如何使用硒识别现有网页上出现的新元素
【发布时间】:2021-07-29 12:11:43
【问题描述】:

我为 React Web 应用程序做了自动化。
寻求帮助以实现以下场景,

我正在单击页面上的按钮。单击按钮后,页面会加载图像。 加载图像大约需要 5 秒。
此外,图像加载到新创建的元素,
(在点击之前的页面中,没有用于加载图像的div,但在我点击按钮后,它会出现在页面上,并且在加载的div 图像内部)。
在我的方法中,我试图验证按钮单击后是否加载了图像。
但它总是返回NoSuchElementException

注意:如果我使用上面的 xpath 手动搜索元素,该元素会突出显示

以下是我尝试过的方法

1.
public static boolean waitElementPresent(SelenideElement element) {
        try {
            element.should(Condition.appear, Duration.ofSeconds(TIME_OUT));
            return true;
        } catch (Exception e) {
            return false;
        }
    }

2.
public static boolean waitElementPresent(SelenideElement element) {
        try {
            element.should(Condition.visible, Duration.ofSeconds(TIME_OUT));
            return true;
        } catch (Exception e) {
            return false;
        }
    }

没有成功, 谁能告诉我使用 Selenide-java 实现这一目标 这里有一些样本负载:

【问题讨论】:

  • 有可用的网址吗?
  • 可能原因:1. 缺少切换到帧 2. 等待时间不足 3. 定位器错误 4. 上述任意组合
  • @theNishant 不,这是在本地主机中,
  • @pburgr 我检查了您提到的上述情况,但仍然相同

标签: java selenium automated-tests selenide


【解决方案1】:

通常,在测试中使用“ifs”和“try/catch”是一种不好的做法。

  1. 为什么需要从waitElementPresent 返回布尔值?你打算用这个布尔值做什么?
  2. 如果元素应该存在 - 只需检查它是否出现:
public static void waitElementPresent(SelenideElement element) {
   element.should(Condition.appear, Duration.ofSeconds(TIME_OUT));
}

https://selenide.org/2019/12/02/advent-calendar-how-to-abuse-selenide/

【讨论】:

  • 我做一个断言,如果元素可用,我需要返回 true 如果元素没有出现,则需要返回 false。我尝试了Condition.appear,正如我在尝试中提到的那样,但我不会成功,(我将调试点放在方法执行之前并等到元素加载,即使它失败了)
  • 为什么需要返回truefalse?你将如何使用这个truefalse
  • 在页面对象层它返回真或假,在测试层(在步骤定义中我做断言。)
  • @RajithKariyawsam 没错!你真的不需要返回一个布尔值并用它做一个断言。 Selenide 方法should(...whatever...) 是断言。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多