1

カレンダーから 3 日前の日付を選択する必要があるケースがあります。セレンを使用してこのケースを自動化する方法。自動化のためにセレンで Java を使用しています。

4

2 に答える 2

2

1) 入力欄に日付が書けること、カレンダーがアイコンのみであることを前提としています。このようなヘルパーメソッドを持つことができます

    public String threeDaysBefore(){
    String threeDaysBefore = "";
    Date date = new Date();
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);

    cal.add(Calendar.DAY_OF_YEAR, -3);
    Date before = cal.getTime();
    SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yyyy HH:mm");
    threeDaysBefore = formatter.format(before);
    return threeDaysBefore;
}

そして、コードの後半で

  WebElement calendarManualInput = driver.findElement...// find the manual input field
  calendarManualInput.sendKeys(threeDaysBefore());

2) カレンダーをクリックすることしかできない場合は、少しトリッキーになります。String は引き続き必要ですが、少し異なります。

    public String threeDaysBefore(){
    String threeDaysBefore = "";
    Date date = new Date();
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);

    cal.add(Calendar.DAY_OF_YEAR, -3);
    Date before = cal.getTime();
    SimpleDateFormat formatter = new SimpleDateFormat("dd");
    threeDaysBefore = formatter.format(before);
    return threeDaysBefore;
}

しかし、上記にはほとんど問題がありません。日付が 1.4 の場合。すると、29.4 と解釈できる "29" が返されます。あなたが起こりたくないこと。したがって、コードの後半で、おそらくこれを行う必要があります

//this will click three days before
Date today = new Date();
Date minusThree = new Date();
Calendar now = Calendar.getInstance();
now.setTime(today);
Calendar before = Calendar.getInstance();
before.setTime(minusThree);
before.add(Calendar.DAY_OF_YEAR, -3);
int monthNow = now.get(Calendar.MONTH);
int monthBefore = before.get(Calendar.MONTH);

if (monthBefore < monthNow){
  // click previous month in the calendar tooltip on page
}
WebElement dateToSelect = driver.findElement(By.xpath("//span[text()='"+threeDaysBefore()+"']"));
dateToSelect.click();
于 2012-04-12T07:29:16.177 に答える