Android uiautomator арқылы мәтінді орнатқаннан кейін пернетақтаны басып тастаңыз

Android үшін uiautomator пайдалану Мәтіндік өріске мәтінді орнатуға болады, бірақ пернетақтаны жаба алмайды. Кейбір телефондарда lanscape режимінде пернетақта барлық экранды алады және осы көрініс үшін шығу үшін «Дайын» ​​сөзі керек. Егер мен пернетақтаны баса алсам, онда uiautomator-ді ландшафтта да, портретте де шығарсыз.

new UiObject(new UiSelector().text("Enter Text")).click();
new UiObject(new UiSelector().className("android.widget.EditText").instance(0)).setText("sample text");

// This is where I need to suppress the keyboard to view the app instead of just the keyboard itself.

new UiObject(new UiSelector().text("Submit")).click();

Алдын-ала рақмет.

1
Сіздің сұрағыңыз қандай?
қосылды автор verybadalloc, көзі

7 жауаптар

Өте дұрыс емес көрінеді, бірақ бұл тапсырма орындалады.

public static final int KEYBOARD_WAIT_TIME = 111;

Espresso.closeSoftKeyboard();
sleep(AutomatedTestConfig.KEYBOARD_WAIT_TIME);
3
қосылды

Әдетте Кері пернені басу пернетақтаны босатады.

getUiDevice().pressBack();
2
қосылды
ақылды шешім бар ма? яғни. пернетақтаның көрсетілуін тексереді, ол басылатын түймені және т.б.
қосылды автор user1050755, көзі
Бұл жұмыс портреттік режимде және пернетақтада «жасалды» қажет болмаған жағдайларды қоспағанда жұмыс істейді. Мен ландшафт үшін ғана арнайы жағдай жасадым.
қосылды автор Daniel, көзі

Әдетте Кері пернені басу пернетақтаны босатады.

getUiDevice().pressBack();
2
қосылды
ақылды шешім бар ма? яғни. пернетақтаның көрсетілуін тексереді, ол басылатын түймені және т.б.
қосылды автор user1050755, көзі
Бұл жұмыс портреттік режимде және пернетақтада «жасалды» қажет болмаған жағдайларды қоспағанда жұмыс істейді. Мен ландшафт үшін ғана арнайы жағдай жасадым.
қосылды автор Daniel, көзі

Бұл өте ескі мәселе, бірақ UiAutomator 2.0-те дұрыс және толық жауап беруге болады, осылайша ол осында.

Оңтайлы болады:

if(isKeyboardOpened()){
    UiDevice.pressBack();
}

Бірақ әлі күнге дейін проблема болды, ол қалай жүзеге асырылады: KeyboardOpened ().

UiAutomator 2.0 құрал-жабдыққа негізделгендіктен, UiAutomation-ге қол жеткізе аламыз, экранда кіретін терезелер бар ма екенін тексере аламыз:

boolean isKeyboardOpened(){
    for(AccessibilityWindowInfo window: InstrumentationRegistry.getInstrumentation().getUiAutomation().getWindows()){
        if(window.getType()==AccessibilityWindowInfo.TYPE_INPUT_METHOD){
            return true;
        }
    }
    return false;
}
1
қосылды
Бұл әрдайым жұмыс істемейді. Бұл функция жалғанған кезде пернетақта бар.
қосылды автор wojciii, көзі
Мен бұл жұмысты жасауға тырысамын, бірақ ол Constants символын шеше алмайды. uiAuto өрісі жоқ SyncStateContract.Constants импорттау үшін Alt + Enter арқылы жылдам түзетулер енгізіңіз. Бұл туралы кез келген идея?
қосылды автор Thanasis Petsas, көзі
Мен оны таптым. UiAutomation объектісін өлшеу құралдарымен алу керек болды: UiAutomation uiautomation = getInstrumentation (). GetUiAutomation ();
қосылды автор Thanasis Petsas, көзі
Тұрақтыларым жаман болды (жобадан көшіріп қойдым және бұл бөлікті өзгертуді ұмытып, кешірім). Мен жауапты өңдеймін.
қосылды автор Inês, көзі
қай жағдайда?
қосылды автор Inês, көзі

Көптеген жұмыстың соңында мен бұл жолды таптым. Проблема - қоңырау getUIDevice (), егер pressBack() сынақтан үзілуі мүмкін, егер ешқандай пернетақта клавиатура көрсетілмеген.

InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isAcceptingText()) {
    getUIDevice().pressBack();
}

Егер пернетақта көрсетілсе, ол тек артқа қарай басылады.

0
қосылды
Мен мұны көрдім және нәтиже әрқашан жалған, пернетақта ашылғанда және жабық болғанда. Сіз неге бұл туралы білесіз бе?
қосылды автор Inês, көзі

DummyIME әрекетін орындап, -e disable_ime true параметрімен uiautomator құралын іске қосыңыз. DummyIME Android өт репозиторийінде орналасқан.

  1. Clone source code of DummyIME:

    git clone https://android.googlesource.com/platform/frameworks/testing
    
  2. Build and install DummyIME (You may change android-18):

    cd testing/uiautomator/utils/DummyIME
    android update project -p . -t android-18
    ant clean debug install
    
  3. Run your tests using the uiautomator framework with -e disable_ime true option.

    adb shell uiautomator runtest  -e disable_ime true -c  
    

Тексерілген құрылғыда әдепкі IME параметрлерін қалпына келтіру керек екенін ескеріңіз себебі ол сынақты іске қосқаннан кейін автоматты түрде DummyIME түрленеді.

0
қосылды

Мен сіздің кодты пайдаланып, кірістірілген мәтіннің соңында \ n қосылды. «Кіру» дегенді симуляциялауға болады, бірақ пернетақта әлі де пайда болды, сондықтан keyb пернесін басу үшін pressBack() қажет.

new UiObject(new UiSelector()
   .className("android.widget.EditText")
   .instance(0))
   .setText("sample text\n");
getUiDevice().pressBack();

Талғампаз шешім бар:

new UiObject(new UiSelector()
   .className("android.widget.EditText")
   .instance(0))
   .setText("sample text");
getUiDevice().pressEnter();
0
қосылды
Сәлеметсіз бе, бұл өте ескі мәселе және сіз тікелей сұраққа жауап бергеніңіз немесе бар жауаптарға қосымша қосуыңыздың анық емес екенін түсінесіз. Егер сіз бұл жалпы мүддені білдіретін техника деп ойласаңыз, мұнда жаңа сұрақ қою және өзіңізге жауап беру дұрыс.
қосылды автор J Richard Snape, көзі