android - uiautomator2 - ¿Podemos encontrar elemento por ID en appium?
tests appium (6)
El siguiente enlace menciona que podemos encontrar un elemento dando id ... pero no puedo encontrarlo.
https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/finding-elements.md
buscar por "nombre" (es decir, el texto, la etiqueta o el Id. generado por el desarrollador, también conocido como ''id. de accesibilidad'' de un elemento)
Intenté el siguiente código:
WebElement el = driver.findElement(By.name("txtLogin"));
donde txtLogin es id para botón de inicio de sesión
da la siguiente excepción:
org.openqa.selenium.NoSuchElementException: An element could not be located on the page using the given search parameters. (WARNING: The server did not provide any stacktrace information)
puede complacer a cualquiera que explique cuáles son todas las formas de encontrar elementos en Appium
Aquí está el código jave con las formas más comunes de localizar elementos usando Appium
//Find element by id and enter Hello in Text box.
driver.findElementById("edit_name").sendKeys("Hello");
//Find element by class name and enter Hello in Text box.
driver.findElementByClassName("com.android.EditText").sendKeys("Hello");
//Find element by xpath and enter Hello in Text box.
driver.findElementByXPath("//cass[@value=''Enter Name'']").sendKeys("Hello");
//Find element by link text and enter Hello in Text box.
driver.findElementByLinkText("Enter Name").sendKeys("Hello");
Si desea aprender más formas de encontrar elementos en appium para nativos y webviews VISITE AQUÍ
En la versión 1.0 de Appium en adelante, findElementByTagName está en desuso.
Debe utilizar findElementByClassName en su lugar con el nombre de clase calificado. Código para EditTextField y Button en Android como se muestra a continuación:
findElements (By.className ("android.widget.EditText"));
findElements (By.className ("android.widget.Button"));
Obtener el elemento por id no es posible para el nivel de la API de Android inferior a 18. Puede verificar en el uiautomatorviewer si el id está presente. Si no, puede obtener todos los elementos del tipo EditView e iterar sobre él para encontrar el campo correcto para enviar texto.
Úsalo de esta manera ...
public List<WebElement> getWebElementList(By by) {
return driver.findElements(by);
}
public void details() throws InterruptedException{
List<WebElement> weList = null;
weList = getWebElementList(By.tagName("android.widget.EditView"));
for (WebElement we : weList) {
if(we.getText().toLowerCase().contains("login")){
we.sendkeys("Hello");
}
}
}
Espero que esto ayude.
Puede encontrar la ID de un elemento usando el uiautomatorviewer de Android. solo vaya a la carpeta de herramientas del SDK D: / Android / android-sdk / tools, aquí puede encontrar uiautomatorviewer. Ábralo y tome capturas de pantalla de su actividad y encuentre el id, clase, paquete de cualquier elemento.
Puede usar el ID de elemento como sigue:
nombre del paquete: com.example.testap
ID de elemento: txtLogin
escriba el siguiente código -
driver.findElement(By.id("com.example.testapp:id/txtLogin")).sendKeys("abc");
Usted puede encontrar por ID usando Xpath también, por ejemplo Aquí el elemento tiene class = "android.widget.Button" e id = "digit5" para que puedas encontrar como
xpath("//android.widget.Button[contains(@resource-id,''digit5'')]")
Xpath es más útil cuando desea aplicar una condición múltiple como xpath("//android.widget.Button[contains(@resource-id,''digit5'') and @text=''5'']")
para más detalles que puede ver en http://www.software-testing-tutorials-automation.com/2015/10/ui-automator-viewer-get-android-app.html