Java и Appium: невозможно щелкнуть элемент

В приложении для Android, которое я тестирую, я пытаюсь щелкнуть/нажать на средство выбора времени. Например, по умолчанию средство выбора времени показывает 08:00. Я хочу изменить час с 8 на 7, а затем изменить минуты, но xpath, похоже, не работает. Он что-то щелкает, но время по-прежнему показывает 08:00, когда я нажимаю кнопку «ОК» с помощью кода. Если кто-то может мне помочь, я также смогу изменить минуты и PM на AM.

Вот что я использую для нажатия на средство выбора часов, чтобы 7 отображалось выбранным:

driver.findElement(By.xpath("//android.widget.NumberPicker[0]/android.widget.Button[0]")).click();

Изображение:

Скриншот тестируемого пользовательского интерфейса


person Varun Bali    schedule 11.09.2015    source источник
comment
У меня нет опыта использования Appium, но индекс XPath начинается с 1 вместо 0, поэтому первое, что я бы попробовал, это изменить индекс вашего выражения XPath.   -  person har07    schedule 12.09.2015


Ответы (5)


Вот решение, которое сработало для меня:

  1. Используйте MobileElement. Я также использую AndroidDriver вместо RemoteWebDriver, поэтому не знаю, сработает это или нет.
  2. Забудьте про клик(). Используйте метод tap(int fingers, int duration) MobileElement. Я не нашел в Интернете, что такое продолжительность (секунды, миллисекунды и т. д., поэтому эти значения просто пробные).

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

Теперь предположим, что час зависит от вашего теста.

            // change hour
            @SuppressWarnings("unchecked")
            List<WebElement> buttons = driver.findElementsByClassName("android.widget.Button");
            MobileElement hour = (MobileElement) buttons.get(0);
            List<WebElement> highlights = driver.findElementsByClassName("android.widget.EditText");
            MobileElement hourHighlight = (MobileElement) highlights.get(0); // highlighted hour

            // lets say we need hour = 4

            while (!hourHighlight.getText().equalsIgnoreCase("4"))
            {
                Thread.sleep(100);
                if (hourHighlight.getText().equalsIgnoreCase("4"))
                {
                    break;
                }
                hour.tap(1, 10);
            }
person Varun Bali    schedule 12.09.2015
comment
метод tap() устарел. - person iversoncru; 25.02.2017
comment
@ivesoncru как насчет tap в классе TouchAction. Разве это не действительно? - person user1207289; 17.10.2017

Я попытался найти элемент по тексту, т.е. «7», и у меня это сработало, попробуйте:

driver.findElementsByName("7").click();

or

helpers.element(By.name("7")).click();

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

Дайте мне знать, если это работает

person Darshan Ambhaikar    schedule 11.09.2015
comment
Это не сработало. 7 не выделено. Я уже попробовал это, прежде чем писать сюда. Я не думаю, что здесь можно использовать By.Name. - person Varun Bali; 11.09.2015

Попробуй это:

driver.findElementByName("7").click();

OR

driver.findElementByXPath("//*[@class='android.widget.button' and @text='7']").click();
person Gaurav    schedule 11.09.2015
comment
Оба они не работали. Тест проходит, но щелчок не регистрируется. Время отображается как 08:00 утра. Как будто во что-то попал, но результат не тот, что ожидался. - person Varun Bali; 11.09.2015
comment
Спасибо Gaurav за то, что нашли время, но ваше решение не сработало. Я разместил решение. - person Varun Bali; 12.09.2015

Если вы хотите попробовать javascript, то, что я обнаружил, работало для устройств Android, когда обычные прикосновения и клики ничего не регистрировали, вот что:

js.executeScript("$('# pageElement .elementClassName').trigger('touchstart')");

person Eric    schedule 30.10.2015

Вместо того, чтобы щелкать номер в NumberPicker, используйте SendKey.


WebElement hour= driver.findElement(By.xpath("//android.widget.TimePicker[1]/android.widget.NumberPicker[0])); hour.sendKeys("8");

person Suman    schedule 04.11.2015