【问题标题】:How to handle multiple popup alerts with Serenity's PageObject如何使用 Serenity 的 PageObject 处理多个弹出警报
【发布时间】:2016-06-14 15:49:35
【问题描述】:

这就是问题所在。我正在使用 Serenity 在 Internet 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 的样子。对第二个Alert 执行类似的if 语句。

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

结果:

【问题讨论】:

    标签: java junit alert pageobjects serenity-bdd


    【解决方案1】:

    据我所知,JDelorean 的原因是在 selenium 代码对警报代码做出反应之前已弹出警报。因此,明智的做法是在警报代码之间添加一些延迟。像我这样的事情如下

    @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());
    

    【讨论】:

    • 感谢您的回复。我已经尝试过wait.until() 方法 - 没有结果。我会试试Thread.sleep(),然后告诉你结果如何。
    • 不幸的是,这些解决方案都不起作用。此外,Thread.sleep() 似乎不是正确的方法,无论它是否有效。
    • 你能分享我你的java代码,如果可能的话,还有那个警报的HTML?
    • 很遗憾不是,这是一个内部业务系统。我的代码与上面几乎相同。提交 btn 执行一次 javascript 方法调用。我假设字段格式检查也是由 javascript 完成的,这就是警报的来源。
    • 好的,请允许我在这里更具体一点,这里有一个对 JavaScript 方法的 HTML 调用。 JavaScript 然后处理来自字段的输​​入:1) 验证年份格式,2) 提示第一个警报,3) 提示第二个警报。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2018-11-10
    • 2015-12-16
    • 2017-01-16
    • 1970-01-01
    • 2015-03-06
    相关资源
    最近更新 更多