场景是在我填写表格的所有必要信息(假设它们都是有效的)之后选择保存,我收到一条消息弹出大约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>
我试图使用“成功保存”文本断言,使用以下代码:
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"}
我想知道我的代码是不正确还是消息消失得比驱动程序找到元素的速度快。
非常感谢任何帮助或纠正。
干杯, 丹尼
答案 0 :(得分: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"));
希望它会对你有所帮助.. :)
答案 1 :(得分:1)
这是我如何为模态做的。这应该在触发模态的事件之后放置。
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());
答案 2 :(得分:1)
我假设你的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"));
让我知道会发生什么。
答案 3 :(得分:1)
感谢各位有耐心并试图提供帮助。我刚刚设法用以下代码解决了这个问题。这是基于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"));