Java & Appium: Не може да се щракне върху елемент

В приложението за Android, което тествам, се опитвам да щракна/докосна инструмента за избор на време. Например по подразбиране инструментът за избор на час показва 08:00 сутринта. Искам да сменя часа от 8 на 7 и след това да променя минутите по-късно, но изглежда, че xpath не работи. Щраква върху нещо, но часът все още показва 08:00 сутринта, когато щракна върху бутона OK чрез кода. Ако някой може да ми помогне, тогава ще мога също да променя минутите и следобед на сутринта.

Ето какво използвам за докосване на инструмента за избор на час, така че 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. Забравете click(). Използвайте метода 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
@iversoncru какво ще кажете за 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
Благодарете на Гаурав, че отделихте време, но вашето решение не проработи. Публикувах решението. - person Varun Bali; 12.09.2015

Ако искате да опитате javascript, това, което открих, че работи за устройства с Android, когато редовните докосвания и кликвания не регистрират нищо, е следното:

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

person Eric    schedule 30.10.2015

Вместо да щракнете върху номера в NumberPicker, използвайте SendKey.


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

person Suman    schedule 04.11.2015