这是问题所在。我正在使用 Serenity 在 Internet Explorer 中运行测试,SELECT m1.*
FROM messages AS m1
JOIN (
SELECT conversation_id, MAX(created_at) AS created_at
FROM messages
GROUP BY conversation_id
) AS m2 ON m1.conversation_id = m2.conversation_id AND m1.created_at = m2.created_at
正在处理我的所有操作,可以通过Serenity的步骤或直接引用< strong> Junit的测试。
我目前正在处理的方案很简单:
然而,PageObject
似乎立即跳转到第二条消息并完全忽略第一条消息。我的实现在以下几个方面:
PageObject
有人可以向我解释这是如何工作的,为什么省略第一个警报? @Test
public void receiptDateFieldIncorrectDateFormat() {
page.open();
steps.inputIntoReceiptDateField("99999999");
steps.clickSubmitButton();
String firstMsg = page.getAlert().getText();
page.getAlert().accept();
String secondMsg = page.getAlert().getText();
page.getAlert().accept();
Assert.assertEquals("The year is invalid.", firstMsg);
Assert.assertEquals("Invalid Receipt Date format.", secondMsg);
}
似乎无法循环显示多个警报。
谢谢!
修改
以下是 JavaScript 的外观。对第二个PageObject
执行类似的if
语句。
Alert
结果:
答案 0 :(得分:0)
JDelorean据我所知,原因是在硒代码对警报代码作出反应之前已经弹出警报。因此,在警报代码之间添加一些延迟是明智的。像我这样做的事情如下
@Test public void receiptDateFieldIncorrectDateFormat() {
page.open();
steps.inputIntoReceiptDateField("99999999");
steps.clickSubmitButton();
Thread.sleep(3000);
String firstMsg = page.getAlert().getText();
page.getAlert().accept();
Thread.sleep(3000);
String secondMsg = page.getAlert().getText();
page.getAlert().accept();
Assert.assertEquals("The year is invalid.", firstMsg);
Assert.assertEquals("Invalid Receipt Date format.", secondMsg);
}
或者您可以使用类似
的内容> WebDriverWait wait = new WebDriverWait(driver, 15);
> wait.until(ExpectedConditions.alertIsPresent());