Невозможно отправить ключи в поле EditText - PullRequest
9 голосов
/ 10 мая 2019

У меня проблемы с выполнением ключей отправки в конкретном поле EditText. Я пробовал грязный xpath и id, но все равно он не входит в текстовое поле. Однако я чувствую, что нет проблем с поиском элемента. Однако он не щелкает в элемент.

Итак, что происходит в приложении, так это то, что когда пользователь выбирает страницу, он открывает веб-представление, и поле EditText находится в этом WebView.

Вот грязный xpath, который я получил от инспектора аппиума:

/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup/android.support.v4.view.ViewPager/android.view.ViewGroup/android.widget.EditText[1]

Вот хороший идентификатор:

@FindBy(id = "test_number")
public WebElement testNumberTextField;

Я пытался использовать find by xpath, используя грязный xpath.

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

    public void enterTestNumber(){
    //List<WebElement> menu22 =drive.getDriver().findElements(By.className("android.widget.EditText"));
   // menu22.get(1).sendKeys(randomStringGeneratorMethods.randomAlphaNumericString(7));
    testPage.testNumberTextField.sendKeys(randomStringGeneratorMethods.randomAlphaNumericString(7));
    //js.executeScript("document.getElementById('"+testPage.testNumberTextField+").value='"+randomStringGeneratorMethods.randomAlphaNumericString(7)+"';");
    }

Генератор случайных чисел - это просто генератор случайных строк, который выглядит так:

public String randomAlphaNumericString(int characterLength) {
    return RandomStringUtils.randomAlphanumeric(characterLength);
}

Кто-нибудь знает, как заставить это работать, чтобы он мог вводить текст в это поле EditText?

Ответы [ 5 ]

4 голосов
/ 14 мая 2019

Поскольку элемент находится в веб-представлении, вам нужно найти элемент html, используя chrome / firefox, так как автоматизатор пользовательского интерфейса Android не сможет обнаружить этот элемент.

Чтобы получить html элемента, вам нужно подключить ваше устройство к Chrome и перейти на chrome://inspect, теперь работать в вашем приложении и открыть веб-просмотр, вы найдете ваше устройство по ссылке chrome://inspectкак только веб-представление открывается, вам нужно выбрать свое устройство оттуда, и вы увидите реплику веб-просмотра, оттуда вы можете проверить элемент и найти html элемента, и используя этот html, вы можете получить xpath.

Теперь у вас есть xpath, вам просто нужно переключить драйвер на веб-просмотр из вашего кода, а затем вы можете ввести значение в поле, используя метод sendKeys().

3 голосов
/ 14 мая 2019

Я не пробовал этого, но вы могли бы отправить текст ввода команды оболочки adb.после нажатия на элемент.

с функцией мобильных команд Appium.

https://appium.io/docs/en/commands/mobile-command/

0 голосов
/ 16 мая 2019

У меня были проблемы с вводом текстового поля, и это помогло.

driver.update_settings({"ignoreUnimportantViews":True})
0 голосов
/ 14 мая 2019

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

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

Я не обладаю достаточным опытом в java, поэтому вот несколько псевдокодов, чтобы дать вам общее представление:

item = driver.findElementByAccessibilityId("test_number");
driver.Mouse.Click(item.coordinates);
driver.pressKey(new KeyEvent(AndroidKey.ENTER));

Вам, вероятно, понадобится перебрать вашу произвольную строку и поместить функцию pressKey в этот цикл, чтобы нажимать каждую клавишу.

0 голосов
/ 13 мая 2019

Если фокус не находится в текстовом файле после загрузки страницы, вам необходимо:

element.click();

до

element.sendKeys();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...