我有 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。 DateFormat
和 SimpleDateFormat
不仅早已过时,而且还非常麻烦。 Date
也同样过时了。我会完全避免这些类(class)。现代 API 通常更容易使用。
链接: Oracle tutorial: Date Time解释如何使用java.time
。
关于java - Java 中基于月份的日期选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49771348/