宁静:找不到目标显示 3 秒

Serenity: Cannot find Target showing for 3 seconds

我试图找到一个 Target,它是一个带有消息的小吃店和一个在我单击按钮后仅显示 3 秒的按钮:

如果我暂停调试器,我会找到带有 css 选择器 .mat-snack-bar-container 的元素:

但是在代码中,当我尝试使用相同的选择器获取 Target 时,它永远不会被发现不是 Target,如果我使用驱动程序来查找元素也不会:

actor.attemptsTo(WaitUntil.the(SnackBar.SNACK_BAR_CONTAINER,isCurrentlyVisible()).forNoMoreThan(10).seconds());

我已经尝试了 isCurrentlyVisibleisVisibleisPresent,但什么都没有。

使用 findElement 我也一无所获:

WebElement snackBar = webDriver.findElement((By.cssSelector(".mat-snack-bar-container")));

当我看到步骤的屏幕截图时,我确实看到了小吃店...

有什么想法吗?谢谢!

我认为你需要:

WebElement snackBar = webDriver.findElement((By.cssSelector(".mat-snack-bar-container")));
WebElement snackBar = webDriver.findElement((By.className(".mat-snack-bar-container")));

如果您知道将显示什么文本,那么您可以使用 textToBePresentInElementLocated 方法。让我们看看下面的例子,

HTML:我假设你的HTML会是这样的。

  <input class="mat-snack-bar-container"> Workflow testing "sth" saved. </input>

等到文本出现如果你知道预期的文本

  WebElement snackBar = wait.until(ExpectedConditions.textToBePresentInElementLocated(By.xpath("//input[@class='mat-snack-bar-container']"), "Workflow testing"));
  snackBar.click();

我找到演员找不到小吃店的原因了。在文件 serenity.properties 中,我有这一行: serenity.step.delay=2500 这正是该元素可见的时间。 如果我直接使用驱动程序,这不会受到影响,我可以在屏幕截图和页面源代码中看到小吃店。但是使用演员我有时只能在屏幕截图中看到它。 一旦我将步长延迟降低到 500,我就能够找到该元素。

谢谢大家的帮助!