Java中基于月份的日期选择器
我有SeleniumWebDriverTestNG的Java代码。用于比较网站上的日期是否与今天的日期相同。 问题是2018年4月11日网页上的日期Java中基于月份的日期选择器,java,date,selenium-webdriver,compare,Java,Date,Selenium Webdriver,Compare,我有SeleniumWebDriverTestNG的Java代码。用于比较网站上的日期是否与今天的日期相同。 问题是2018年4月11日网页上的日期dateOnWebpage是格式 今天2018年4月11日 因此,我使用选择器来比较日期格式,如果月份
dateOnWebpage
是格式
今天2018年4月11日
因此,我使用选择器来比较日期格式,如果月份<10if(javaDateSelector<10)
比要比较的日期的格式是M/dd/yyyy,否则的格式是MM/dd/yyyy
有没有比我做的更好的编码方法?因为我需要将date解析为string,而不是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);
}
@测试(优先级=3)
public void test3DateCheck()引发异常
{
字符串dateOnWebpage=driver.findElement(By.xpath(“//div[@id='homeCalendarSection']]/div/div/div[2]/table/tbody/tr/td/div/ul/li”).getText();
System.out.println(“网页上的今天日期为:“+dateOnWebpage”);
//DateFormat dateFormat1=新的简化格式(“M/dd/yyyy”);
DateFormat dateFormat1=新的SimpleDateFormat(“MM”);
日期=新日期();
字符串javaDate1=dateFormat1.format(日期);
int javaDateSelector=Integer.parseInt(javaDate1);
如果(javaDateSelector<10)
{
DateFormat dateFormat2=新的简化格式(“M/dd/yyyy”);
字符串javaDate2=dateFormat2.format(日期);
println(“来自Java的今天的日期是:“+javaDate2”);
Assert.assertEquals(dateOnWebpage,“今日”+javaDate2);
}
其他的
{
DateFormat dateFormat3=新的简化格式(“MM/dd/yyyy”);
字符串javaDate3=dateFormat3.format(日期);
println(“来自Java的今天的日期是:“+javaDate3”);
Assert.assertEquals(dateOnWebpage,“今日”+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,也会打印两位数字。格式
方法还能做什么?如果总是需要两位数的月份,请将dd
放入格式模式字符串中
在这两个片段中,请填写您想要的时区,我把太平洋/诺福克放在这里,因为全球各地的日期都不一样
我正在使用并推荐java.time
,这是一种现代的java日期和时间APIDateFormat
和SimpleDateFormat
不仅早已过时,而且还出了名的麻烦<代码>日期也同样过时。我会完全避开那些课程。现代API通常更易于使用
链接:解释如何使用
java.time
我建议您避免使用SimpleDataFormat
类。它不仅早已过时,而且还出了名的麻烦。今天,我们的情况好多了。4月9日会以4/9/2018
或4/09/2018
的形式出现在网页上吗?您不需要有条件地切换格式M/dd/yyyyy
与MM/dd/yyyy
月数>=10.1)@Ole V.V.对不起,我不知道4月9日是以2018年4月9日还是2018年4月9日的形式出现在网页上,但谢谢,这可能会引起另一个问题。2) @Thomas我需要有条件地切换格式M/dd/yyyy与MM/dd/yyyy不相同如果我这样做,我会得到错误java.lang.AssertionError:预期[今天2018年11月4日],但发现[今天2018年11月4日]