with uiautomator2 tutorial tests real for capabilities android appium

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