Cucumber / Java проверка результатов, которые были 3 месяца назад - PullRequest
0 голосов
/ 17 января 2020

Я новичок в фреймворке Cucumber / java. Я пытаюсь проверить информацию на веб-странице, которая содержит месяц, который датируется 3 месяцами go. Так, например: 1. Я ищу некоторую информацию. 2. Фильтрую обратно на 3 месяца. 3. Сделайте утверждение, чтобы убедиться, что мой фильтр отображает результаты за 3 месяца go. На веб-странице есть столбец, который отображает дату мм / дд / гг. Поэтому мне нужно создать метод для проверки того, что дата составляет 3 месяца go, проверяя месяц и / или год?

    @Then("Verify that the filtered results display information dated back 90 days")
        **public void verifyFilterBuilds90Days() { assert dashBoardPage.verifyFilterBuilds90Days();** }


    public int verifyFilterBuilds90Days(){
            Calendar calMinus3Months = Calendar.getInstance();
            calMinus3Months.add(Calendar.MONTH, -3);
            return Calendar.MONTH;
        }

1 Ответ

0 голосов
/ 21 января 2020

java .time

Вы после чего-то вроде этого?

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uu");

    String dateFromWebPage = "10/21/19";

    String expected = LocalDate.now(ZoneId.systemDefault())
            .minusMonths(3)
            .format(dateFormatter);

    if (dateFromWebPage.equals(expected)) {
        System.out.println("They agree");
    } else {
        System.out.println("They do not agree");
    }

Когда я только что запустил этот код, вывод был:

Они согласны

Имейте в виду, что:

  • Если между веб-страницей и временем запуска теста проходит полночь, дата больше не совпадает.
  • Если веб-сервер и ваш компьютер используют разные часовые пояса, дата, вероятно, не всегда будет совпадать.
  • В худшем случае «3 месяца назад» не всегда четко определены. Что такое 3 месяца назад с 31 мая? Это не может быть 31 февраля, потому что в феврале всего 28 или 29 дней.

Полагаю, что в результате пуленепробиваемого теста будет получено от 1 до 3, 4 или 5 дат, которые были бы приемлемы, принимая Эти пункты учитываются и будут удовлетворены, если только один из них был фактически напечатан на веб-странице Например:

    // Assume that the web page has been generated within the last hour
    LocalDate earliestExpected = OffsetDateTime.now(ZoneOffset.MIN)
            .minusHours(1)
            .toLocalDate()
            .minusMonths(3);
    LocalDate latestExpected = LocalDate.now(ZoneOffset.MAX)
            .minusMonths(3);
    System.out.println("Expected interval: " + earliestExpected + " - " + latestExpected);

    LocalDate actual = LocalDate.parse(dateFromWebPage, dateFormatter);
    if (actual.isBefore(earliestExpected) || actual.isAfter(latestExpected)) {
        System.out.println("They do not agree");
    } else {
        System.out.println("They agree");
    }

Когда я только что запустил этот фрагмент (утром 22 января в моем часовом поясе), получилось:

Expected interval: 2019-10-21 - 2019-10-22
They agree

Если мы запускаем его в середине дня UT C 1 марта в не високосный год, ожидаемый интервал дат может включать 28, 29 и 30 ноября и 1 и 2 декабря (все в предыдущем году), поскольку в то время на Земле будут места, где еще 28 февраля, и другие места, где уже 2 марта. Если мы проведем его около полуночи с 31 мая по 1 июня, ожидаемый интервал будет включать только 28 февраля и 1 марта. потому что java .time определяет 3 месяца назад с 31 мая как последний день февраля.

Ссылка: Oracle учебник: Дата и время , объясняя, как использовать java .time.

...