簡體   English   中英

如何自動化 Android 6.0 日期選擇器來設置任何日期?

[英]How to automate Android 6.0 Date picker to set any date?

任何人都可以幫助我如何使用 Appium 和 Java 在 Android 6.0 中自動化 DatePicker? 我只能在當月日期自動執行它。 但是我需要為傳遞給該方法的任何日期設置日期。

日期選擇器圖像

我終於解決了這個問題。 我所做的是從我選擇當前年份和月份的日期選擇器。 從中我計算了前進的點擊次數或后退到給定日期的點擊次數。 這是代碼片段。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM