Nano Hash - криптовалюты, майнинг, программирование

Выберите элемент из AutoCompleteTextView в uiautomator

ОБНОВЛЕНИЕ

Сегодня этот проект больше не поддерживается, но решения приветствуются. Спасибо.


Проблема адаптера AutoCompleteTextView для выбора элемента

Я создаю тестовый проект автоматизации, в котором у меня есть проблема с выбором элемента из AutoCompleteTextView.

Вы можете увидеть снимок и виды [все развернуто], которые он имеет. Выпадающий список AutoCompleteTextView не отображается в дереве представлений, и я не могу выбрать его с помощью мыши.

Я пробовал следующие подходы для выбора формы элемента из адаптера AutoCompleteTextView:

  1. UiScrollable locationList = new UiScrollable(new UiSelector().scrollable(true)); locationList.scrollTextIntoView(location);

  2. UiScrollable locationList = new UiScrollable(locationEditText.getSelector()); locationList.scrollTextIntoView(location); Здесь locationEditText — это мой AutoCompleteTextView

  3. UiObject selectedLocation = locationList.getChild(new UiSelector().text(location)); selectedLocation.click(); из locationList не выбирает элемент с переданной строкой.

  4. editLocationResId = "android:id/text1"; UiObject selectedLocation = new UiObject(new UiSelector().resourceId(editLocationResId)); selectedLocation.click(); Идентификатор из текстового представления адптера тоже не работает.

Может ли кто-нибудь помочь мне с выбором элемента из AutoCompleteTextView в uiautomator? Или больше подходов получить желаемый результат.


  • Как я видел много вопросов, связанных с этим, но все еще не надежные решения! :( вот ссылка: groups.google.com/forum /#!msg/appium-discuss/0XAST8Bs3hw/ вопрос был опубликован давно.Кроме того, чтобы сделать это, нужно щелкнуть координаты.Опять же все еще отличается для разных устройств. 11.08.2014
  • Я протестировал тесты UIAutomator на многих устройствах и обнаружил, что только некоторые из них обеспечивают доступность для выполнения автоматизации. Устройства Nexus обеспечивают лучшую доступность, чем устройства Samsung/Sony/HTC, в то время как устройства (Micromax)Canvas не предоставляют ее вообще (очень незначительно). 07.10.2014

Ответы:


1

Получить координаты текстового поля:

int x = element.getLocation().getX();
int y = elmement.getLocation().getY();

Добавьте значения, чтобы получить правильные координаты.

x = x+x1
y = y+y1

Используйте функцию крана, чтобы щелкнуть по нему.

Действие TouchAction = новое действие TouchAction (драйвер);

action.tap(x,y).perform();

17.01.2017

2

сначала откройте список выбора, затем попробуйте использовать UiDevice.pressKey(), чтобы отправить событие DPAD_DOWN OR UP, и нажмите Enter, чтобы выбрать нужный элемент.

18.07.2017

3

Если вам нужно нажать на первый элемент из выпадающего списка, я нашел полезный обходной путь:

public void selectFirstElement() {
       TouchAction touchAction = new TouchAction(getAppiumDriver());
       int xTapped = autoCompleteTextView.getLocation().getX() +  autoCompleteTextView.getSize().getWidth() / 2;
       int yTapped = autoCompleteTextView.getLocation().getY() +  autoCompleteTextView.getSize().getHeight() ;
       touchAction.tap(xTapped, yTapped).perform(); }

Учитывая AutoCompleteTextView, объявленный как autoCompleteTextView, вы можете получить текущее местоположение на экране и вычислить элемент, который будет расположен под ним. Надеюсь, поможет!

09.10.2017

4

Что ж, я нашел обходной путь (это для автозаполнения текста, для счетчика удаления setText()):

UiObject edit = mDevice.findObject(new UiSelector().className(EditText.class).instance(0));
        edit.click();
        edit.setText(name);
        Rect rect = edit.getBounds();
        mDevice.waitForWindowUpdate(Package.DIGI_PACKAGE, 1000);
        mDevice.click(rect.left + 64, rect.bottom + 72);

Получите объект, щелкните его, вставьте текст, который вы хотите, дождитесь появления раскрывающегося списка, затем щелкните под ним с несколькими пикселями.

16.03.2018

5

Я создал и использую самый простой и эффективный способ. Просто найдите, введите и затем выберите нужное значение в текстовом представлении автозаполнения.
Надеюсь, оно сработает и для вас.

driver.findElement(By.id(“Element ID”)).clear();
driver.findElement(By.id(“Element ID”)).sendKeys("Type what you want to select");
driver.pressKeyCode(AndroidKeyCode.KEYCODE_PAGE_DOWN);
driver.pressKeyCode(AndroidKeyCode.ENTER);
26.08.2018

6

Вы можете найти элемент, который хотите выбрать, используя его текст. Убедитесь, что эта строка кода выполняется после отображения списка предложений.

//Get a reference to the autocomplete element
UiObject2 autocomplete = device.findObject(By.res("yourpackage","autocomplete_id"));
//Put a text that will trigger the suggestion list
autocomplete.setText("68623 Lampertheim"); 
//Gain the focus
autocomplete.click();
//Finally, find the element that we want in the suggestion list and click it
device.findObject(By.text("68623 Lampertheim")).click();

Надеюсь, поможет.

03.12.2019

7

попробуйте код ниже, он сработал для меня.

Я использую AutoCompleteText для автоматического завершения местоположения, в котором в данный момент находится пользователь, locationList — это не что иное, как массив, который я написал в файле strings.xml, поэтому используйте здесь свой собственный массив строк.

  locationList = res.getStringArray(R.array.ticketLocation);

        ArrayAdapter<String> locationAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, locationList);

        AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.txtCountries);
        textView.setThreshold(1);
        textView.setAdapter(locationAdapter);
        textView.setValidator(new Validator());
        textView.setOnFocusChangeListener(new FocusListener());

        textView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // TODO Auto-generated method stub
                TextView ticketLocation = (TextView) view;
                getTicketLocation = ticketLocation.getText().toString();
            }
        });

и ниже приведен код для проверки ввода текста в поле местоположения, метод fixText() не позволяет пользователю вводить текст, которого нет в вашем массиве строк, например: если пользователь вводит "germany", который не не существует в вашем списке массивов строк, он будет заменен на " ", который является пустой строкой внутри вашего поля ввода текста редактирования

 class Validator implements AutoCompleteTextView.Validator {

        @Override
        public boolean isValid(CharSequence text) {
            // Log.v("Test", "Checking if valid: " + text);
            Arrays.sort(locationList);
            if (Arrays.binarySearch(locationList, text.toString()) > 0) {
                return true;
            }

            return false;
        }

        @Override
        public CharSequence fixText(CharSequence invalidText) {
            // Log.v("Test", "Returning fixed text");

            /*
             * I'm just returning an empty string here, so the field will be
             * blanked, but you could put any kind of action here, like popping
             * up a dialog?
             *
             * Whatever value you return here must be in the list of valid
             * words.
             */
            return "";
        }
    }

    class FocusListener implements View.OnFocusChangeListener {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // Log.v("Test", "Focus changed");
            if (v.getId() == R.id.txtCountries && !hasFocus) {
                // Log.v("Test", "Performing validation");
                ((AutoCompleteTextView) v).performValidation();
            }
        }
    }
09.03.2015
  • Спасибо за попытку. Но, пожалуйста, внимательно прочитайте вопрос, а затем попробуйте прокомментировать или ответить. Вы можете спросить, если вы не понимаете вопрос. [(P.S) Это тестовый код Automator] 10.03.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..