java - Java 中基于月份的日期选择器

标签 java date selenium-webdriver compare

我有 Selenium Webdriver TestNG 的 Java 代码。用于比较网站上的日期是否与今天相同。 问题是网页上的日期dateOnWebpage 2018 年 4 月 11 日的格式为

Today 4/11/2018

所以我制作了选择器来比较日期格式(如果月份 < 10 if(javaDateSelector < 10))要比较的日期的格式为 M/dd/yyyy,否则格式为 MM/dd/yyyy。

还有比我编写的更好的编码方法吗?因为我需要将日期解析为字符串,然后解析为 int 来进行比较,并且代码很长。

@Test(priority=3)
 public void test3DateCheck() throws Exception
 {

  String dateOnWebpage = driver.findElement(By.xpath("//div[@id='homeCalendarSection']/div/div[2]/table/tbody/tr/td/div/ul/li")).getText();

  System.out.println("Today Date on webpage is : " + dateOnWebpage);

  //DateFormat dateFormat1 = new SimpleDateFormat("M/dd/yyyy");
  DateFormat dateFormat1 = new SimpleDateFormat("MM");
  Date date = new Date();
  String javaDate1 = dateFormat1.format(date);
  int javaDateSelector = Integer.parseInt(javaDate1);

  if(javaDateSelector < 10)
  { 
      DateFormat dateFormat2 = new SimpleDateFormat("M/dd/yyyy");  
      String javaDate2 = dateFormat2.format(date);
      System.out.println("Today Date from Java is : " + javaDate2);
      Assert.assertEquals(dateOnWebpage, "Today " + javaDate2);
  }
  else
  {
      DateFormat dateFormat3 = new SimpleDateFormat("MM/dd/yyyy");  
      String javaDate3 = dateFormat3.format(date);
      System.out.println("Today Date from Java is : " + javaDate3);
      Assert.assertEquals(dateOnWebpage, "Today " + javaDate3);
  }

}

最佳答案

如果您不关心网页上的日期是否以月份和月份的前导零书写,而只想测试日期是否正确:

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("'Today' M/d/uuuu");
    LocalDate today = LocalDate.now(ZoneId.of("Pacific/Norfolk"));
    System.out.println("Today is " + today);
    LocalDate observedDate = LocalDate.parse(dateOnWebpage, dateFormatter);
    Assert.assertEquals(today, observedDate);

我不是测试字符串,而是解析日期并测试它。即使该模式中包含一个 M 和一个 d,解析两位数的月份和两位数的月份日也不会出现问题。

另一方面,如果您还想测试网页上的日期是否不带任何前导零,最好测试该字符串,就像您已经做的那样:

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M/d/uuuu");
    LocalDate today = LocalDate.now(ZoneId.of("Pacific/Norfolk"));
    String todayString = today.format(dateFormatter);
    System.out.println("Today is " + todayString);
    Assert.assertEquals("Today " + todayString, dateOnWebpage);

同样,即使模式中有一个 M 和一个 d,如果月份或月份中的某天大于 9,也会打印两位数字。 format 方法还能做什么?如果您始终需要两位数的月份日期,请将 dd 放入格式模式字符串中。

在这两个片段中,请填写您所需的时区,我将太平洋/诺福克放在其中,因为全局各地的日期都不相同。

我正在使用并推荐 java.time,这是现代 Java 日期和时间 API。 DateFormatSimpleDateFormat 不仅早已过时,而且还非常麻烦。 Date 也同样过时了。我会完全避免这些类(class)。现代 API 通常更容易使用。

链接: Oracle tutorial: Date Time解释如何使用java.time

关于java - Java 中基于月份的日期选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49771348/

相关文章:

ruby-on-rails - 在一个月内创建的 Rails 范围

php - SQL WeekOfYear() 在年底停止。备择方案?

java - textToBePresentInElement() 不适用于确切的文本

php - 选择 PHPUnit Selenium 2 测试用例中的所有匹配元素

java - 从特定的 jar 导入类文件

java - java中如何使用字符串与字段名进行比较?

java - Java 9 中的 requires 和 requires 传递语句有什么区别?

java - 我需要一个遍历日期间隔的循环

java - 获取应用于 WebElement 的 css 类

java - Libgdx 在舞台上显示文本/乐谱作为 Actor