我有Selenium Webdriver TestNG的Java代码。用于比较网站上的日期是否与今天日期相同。
问题是2018年4月11日网页dateOnWebpage
上的日期格式为
今天4/11/2018
所以我选择比较日期格式,如果几个月&lt; 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);
}
}
答案 0 :(得分:1)
如果您不关心网页上的日期是否以月份和月份的前导零写入,只是想测试日期是否正确:
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,也会打印两位数。{{ 1}}方法吗?如果您每月需要两位数的日期,请将format
放在格式模式字符串中。
在两个片段中,请填写我所在的时区,我放置太平洋/诺福克,因为它在世界各地从来都不是同一个日期。
我正在使用并推荐现代Java日期和时间API dd
。 java.time
和DateFormat
不仅已经过时了,而且也是出了名的麻烦。 SimpleDateFormat
就像过时一样。我会完全避免这些课程。现代API通常可以更好地使用。
链接: Oracle tutorial: Date Time解释如何使用Date
。