![](/img/trans.png)
[英]How can I set current date (Today's date) same as selected date in Material Date Picker Android
[英]How to automate Android 6.0 Date picker to set any date?
我終於解決了這個問題。 我所做的是從我選擇當前年份和月份的日期選擇器。 從中我計算了前進的點擊次數或后退到給定日期的點擊次數。 這是代碼片段。
public class Base {
// Pass monthName param as "August"
public int getMonthNumber(String monthName) throws ParseException {
Date date = new SimpleDateFormat("MMMM").parse(monthName);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
System.out.println(calendar.get(Calendar.MONTH) + 1);
return calendar.get(Calendar.MONTH) + 1;
}
// Pass date param as "Sun, Jul 1"
public String getMonthNameInThreeChars(String date) {
return date.substring(5, 8);
}
}
public class CommonLocators extends Base {
public void setAndroidDatePicker(String date) throws IOException, ParseException {
int thisYear = Integer.valueOf(androidDriver.findElement(By.id("android:id/date_picker_header_year")).getAttribute("name"));
String today = androidDriver.findElement(By.id("android:id/date_picker_header_date")).getAttribute("name");
int thisMonth = getMonthNumber(getMonthNameInThreeChars(today));
// Split the given date into date, month and year
String[] splitdate = date.split("\\s+");
int givenDay = Integer.valueOf(splitdate[0]);
int givenMonth = getMonthNumber(splitdate[1]);
int givenYear = Integer.valueOf(splitdate[2]);
int forwardTaps = 0;
int backwardTaps = 0;
int yearFactor = 0;
if (givenYear == thisYear)
{
if (givenMonth >= thisMonth)
{
forwardTaps = givenMonth - thisMonth;
} else {
backwardTaps = thisMonth - givenMonth;
}
}
else if (givenYear > thisYear)
{
yearFactor = (givenYear - thisYear) * 12;
if (givenMonth >= thisMonth)
{
forwardTaps = yearFactor + (givenMonth - thisMonth);
} else {
forwardTaps = yearFactor - (thisMonth - givenMonth);
}
}
else {
yearFactor = (thisYear - givenYear) * 12;
if (givenMonth >= thisMonth)
{
backwardTaps = yearFactor - (givenMonth - thisMonth);
} else {
backwardTaps = yearFactor + (thisMonth - givenMonth);
}
}
for (int i=1; i<=forwardTaps; i++) {
androidDriver.findElement(By.id("android:id/next")).click();
}
for (int i=1; i<=backwardTaps; i++) {
androidDriver.findElement(By.id("android:id/prev")).click();
}
String xpath = "//android.view.View[@text='day']";
androidDriver.findElement(By.xpath(xpath.replace("day", String.valueOf(givenDay)))).click();
//Tap on OK button of the date picker
androidDriver.findElement(By.id("android:id/button1")).click();
}
}
public class CommonStepDefinitions {
@Test
public void setDate(String date) throws IOException, ParseException {
commonLocators.setAndroidDatePicker(date);
}
}
使用Android (Espresso only)
$driver.execute_script('mobile:setDate', { year: 2020, monthOfYear: 1, dayOfMonth: 25, element: $driver.find_element(:id, 'android:id/datePicker') })
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.