Автоматизация тестирования Appium: найдите элемент с идентификатором @ref в Android Studio

У меня есть элемент в Android:

<android.support.design.widget.TextInputLayout
    android:layout_width="-1"
    android:layout_height="-2">

    <AutoCompleteTextView
        android:id="@ref/0x7f0c007c"
        android:layout_width="-1"
        android:layout_height="-2"
        android:hint="@ref/0x7f060035"
        android:maxLines="1"
        android:singleLine="true"
        android:inputType="0x21" />
</android.support.design.widget.TextInputLayout>

имя для 0x7f0c007cpassword внутри файла ids.xml.

Этот TextInputLayout находится в LoginActivity, который начинается сразу после SplashScreenActivity.

Это мой класс для теста:

public class test02 {

    WebDriver driver;

    @Before
    public void testApp() throws MalformedURLException, InterruptedException {
        String apkpath = "C:\\Users\\0013498\\Desktop\\qa-XXX-2-2-4-2.apk";
        File app = new File(apkpath);
        DesiredCapabilities capabilities= new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.BROWSER_NAME,"Android");
        capabilities.setCapability("deviceName","Emulator");
        capabilities.setCapability("platformName","Android");
        capabilities.setCapability("app",app.getAbsolutePath());
        capabilities.setCapability("appPackage", "com.XXX.XXX");
        capabilities.setCapability("appActivity", "com.XXX.XXX.SplashScreenActivity");
        driver = new AppiumDriver(new URL("http://127.0.0.1:4725/wd/hub"),capabilities);
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        //int KEYCODE_BACK  Back key.   Constant Value: 4
    }

    @Test
    public void appiumExampleTest() throws Exception {
        //WebElement emailEV=driver.findElement(By.id("com.XXX.XXX:id/email"));
        //WebElement emailEV=driver.findElement(By.id("com.XXX.XXX.android:id/email"));
        WebElement emailEV=driver.findElement(By.xpath(".//*[@id='email']"));

        emailEV.sendKeys("@");

        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);  
    }
}

Как видите, я просто пытаюсь установить текст, используя идентификатор AutoCompleteTextView.

Моя проблема в том, что мой тест не может найти элемент, и я пробовал это 3 способами:

WebElement emailEV=driver.findElement(By.id("com.XXX.XXX:id/email"));
WebElement emailEV=driver.findElement(By.id("com.XXX.XXX.android:id/email"));
WebElement emailEV=driver.findElement(By.xpath(".//*[@id='email']"));

но ни один из них не работает.

сообщение об ошибке:

org.openqa.selenium.NoSuchElementException: Не удалось найти элемент на странице с заданными параметрами поиска.

Я новичок в тестировании automatization с Appium и Android, и я немного растерялся.

Пожалуйста, любая помощь?

Спасибо

РЕДАКТИРОВАТЬ:

как было предложено в ответе на мой вопрос, я начал использовать UI Automator Viewer. Это файл .bat, расположенный в папке /sdk/tools.

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

Таким образом, я мог видеть правильный идентификатор:

введите здесь описание изображения

Я наконец использовал:

AndroidElement emailEV=driver.findElement(By.id("com.mobgen.interview.mobgeninterviewtest:id/email"));
    emailEV.setValue("@"); // although i'm stuck here now

Спасибо за помощь!


person iversoncru    schedule 21.02.2017    source источник
comment
Не могли бы вы добавить скриншот экрана через UiAutomator?   -  person Vinod    schedule 22.02.2017
comment
как указано выше, пожалуйста, добавьте представление от инспектора (либо appium, либо UiAutomator), чтобы иметь возможность видеть, как этот элемент, с которым вы пытаетесь взаимодействовать, виден для appium, возможно, идентификатор, который вы пытаетесь использовать, не применяется к нему должным образом, поэтому он не виден для аппий   -  person Jakub Obstarczyk    schedule 22.02.2017
comment
на самом деле, я прочитал первый ответ сегодня утром, и я не использовал UiAutimator, такой вот n00b. Я начал использовать его, и я получил решение. я редактирую свой вопрос. Большое спасибо.   -  person iversoncru    schedule 22.02.2017


Ответы (1)


person    schedule
comment
click работает нормально (так что xpath хорош), но sendKeys выдает ошибку en: org.openqa.selenium.WebDriverException: при обработке команды произошла неизвестная ошибка на стороне сервера. - person iversoncru; 23.02.2017
comment
что вы передаете в тексте? - person akhilesh gulati; 24.02.2017
comment
я вызываю elementSendText (путь, @); внутри appiumExampleTest() - person iversoncru; 24.02.2017
comment
Могу ли я не использовать xpath. - person akhilesh gulati; 25.02.2017
comment
Строка path=//android.widget.EditText[contains(@resource-id,\email\)]; то же самое, что вы разместили - person iversoncru; 25.02.2017
comment
Пожалуйста, используйте тот, который я дал вам. - person akhilesh gulati; 26.02.2017