У меня есть элемент в 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>
имя для 0x7f0c007c
— password
внутри файла 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
Спасибо за помощь!