【问题标题】:Selenium WebDriver - Assert Fading messageSelenium WebDriver - 断言衰落消息
【发布时间】:2016-10-21 06:24:26
【问题描述】:

场景是,在我填写完表单的所有必要信息(假设它们都是有效的)然后选择保存后,我收到一条消息弹出大约 6-7 秒,说表单已成功保存然后它会随着它的 HTML 代码一起消失,这是

   <div data-notify="container" class="alert-success animated" role="alert" data-notify-position="top-right">
           <span data-notify="title">
             <span class="glyphicon glyphicon-ok">
              ::before
             </span>
             <span> Saving</span>
             <span data-modify="message">Successfully saved</span>
          </span>
</div>

HTML Code

我正在尝试使用文本“成功保存”进行断言,代码如下:

String message = driver.findElement(By.cssSelector("span.glyphicon glyphicon-ok")).getText();
assertTrue(message.contains("Successfully saved"));

不幸的是,它返回失败,因为找不到元素

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"css selector","selector":"span.glyphicon glyphicon-ok"}

我想知道是我的代码不正确还是消息消失的速度比驱动程序找到元素的速度快。

任何帮助或更正将不胜感激。

干杯, 丹尼

【问题讨论】:

  • 这里的部分问题可能是您的 cssSelector 中不应该有空格。我建议只使用“span.glyphicon-ok”就足够了。正如其他一些人所提到的,您还需要使用 WebDriverWait。
  • 为什么不把事情简化呢?只需获取页面源并验证您的消息是否存在?比如,driver.getPageSource().contains("保存成功");
  • 嗨,Arpan,我确实在一开始就尝试过getPageSource,但没有成功,这就是我来这里寻求帮助的原因。 :-)

标签: javascript java selenium selenium-webdriver


【解决方案1】:

尝试如下:-

WebDriverWait wait = new WebDriverWait(driver, 100);
WebElement el = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@data-notify='container']/descendant::span[@data-modify='message']")));
String message = el.getText();
assertTrue(message.contains("Successfully saved"));

希望对你有帮助..:)

【讨论】:

  • 嗨,Saurabh,谢谢你的例子,不幸的是它不起作用:-(,仍然无法找到元素
  • $x("//div[@data-notify='container']/descendant::span[@data-modify='message']") 复制这一行并粘贴到浏览器控制台,让我知道你得到了什么???
  • 嗨,Saurabh,我刚刚在 Chrome 上做了,控制台只返回空白 []
  • 正如你所说,这个元素仅弹出 6-7 秒......所以你有没有在控制台看到它时尝试过?
  • 嗨,Saurabh,是的,我确实做过多次,但一直收到 [] 响应
【解决方案2】:

这是我如何为模态做的。这应该放在触发模态的事件之后。

WebDriverWait wait = new WebDriverWait(driver, 3);
WebElement el = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("div.alert-success")));   
WebElement message = driver.findElement(By.xpath("//span[@data-modify='message']"));
Assert.assertEquals("Successfully saved", message.getText());

【讨论】:

  • 嗨 Efx,谢谢你的例子,不幸的是它没有工作:-(,仍然无法找到元素。我已经用完整代码的图像更新了帖子,你可以检查出来吧。
  • 太棒了!正确的!等待确切的类值可用。
【解决方案3】:

我假设你的 html 代码的缩进和你给出的一样。所以,试试下面的代码:

//wait here for some momnent
String message = driver.findElement(By.cssSelector("div.alert-success.animated>span>span:nth-child(3)")).getText();
printn("message is " +message);
assertTrue(message.contains("Successfully saved"));

让我知道会发生什么。

【讨论】:

  • 你好,谢谢你的例子,不幸的是它没有工作:-(,仍然无法找到元素。我已经用完整代码的图像更新了帖子,你可以检查出来吧。
  • 是的,因为你给定的 html 与图像不一样......你不能期望从错误的 html 得到正确的答案
【解决方案4】:

感谢各位耐心等待并提供帮助。我只是设法用以下代码解决了这个问题。这是基于 Efx 的代码,但我稍微调整了一下。

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement el = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[contains(@class, 'col-xs-11 col-sm-4 alert alert-success animated fadeInDown fadeOutUp')]")));   
assertTrue(el.getText().contains("Successfully saved"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2023-01-17
    • 2019-04-15
    • 2017-05-26
    • 2016-03-16
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多