如何使用Serenity的PageObject处理多个弹出警报

时间:2016-06-14 15:49:35

标签: java junit alert pageobjects serenity-bdd

这是问题所在。我正在使用 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的测试。

我目前正在处理的方案很简单:

  1. 在字段中输入日期(输入&#34; 99999999&#34;)。
  2. 点击“提交”按钮。
  3. 获取弹出警报消息。
    • 获取&#34;年份无效。&#34; msg first。
    • 获取&#34;无效的收据日期格式。&#34; msg second。
  4. 然而,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

    结果:

    enter image description here

1 个答案:

答案 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());