2

这就是问题所在。我正在使用SerenityInternet Explorer中运行测试,并PageObject通过 Serenity 的步骤或通过Junit测试中的直接引用来处理我的所有操作。

我目前正在处理的场景很简单:

  1. 在字段中输入日期(输入“99999999”)。
  2. 单击提交按钮。
  3. 获取弹出警报消息。
    • 获取“年份无效”。先发信息。
    • 获取“无效的收据日期格式”。消息第二。

但是,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);
}

有人可以向我解释这是如何工作的,为什么省略了第一个警报?PageObject似乎没有循环浏览多个警报的功能。

谢谢!

编辑

下面是JavaScript的样子。对第二个执行类似if的语句Alert

temp = inputDate.substring(0, 4);
//alert("year " + temp);
if (temp > 2500 || temp < 1940) {
    alert ("The year is invalid");
    return false;
}

结果:

在此处输入图像描述

4

1 回答 1

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());
于 2016-06-15T09:14:48.523 回答