que pruebas localizadores funciona con como automatizar automatizadas java android validation selenium-webdriver appium

java - pruebas - No se puede localizar la validación de la aplicación nativa de Android después de muchos esfuerzos en la automatización



pruebas automatizadas con appium (2)

Estoy haciendo la automatización de la aplicación nativa de Android y quiero verificar la validación de inicio de sesión con texto. Cuando traté de recogerlo con el inspector de Appium y Uiautomator. Ambos no pueden localizar la sección de validación tan difícil de escoger.

Intenté el código de diferentes foros y la discusión de Appium, pero aún no pude encontrar esa validación a través de la automatización. He intentado lo siguiente:

Código 1

JavascriptExecutor js = (JavascriptExecutor)driver; WebElement field = driver.findElement(By.xpath("//android.widget.EditText[@text=''Enter mobile number'']")); // Boolean is_valid = (Boolean)js.executeScript("return arguments[0].checkValidity();", field); try { String message = (String) js.executeScript("return arguments[0].validationMessage;", field); } catch (Exception E) {

Salida:

Excepción: org.openqa.selenium.WebDriverException: el método aún no se ha implementado

Código 2

public boolean IsValidationFired() { if(driver.getPageSource().contains("Invalid")) { System.out.println("PASS"); } else { System.out.println("FAIL"); } }

Salida:

Print = FAIL

No estoy seguro de si se trata de una ventana emergente javascript o de una aplicación nativa o un mensaje de brindis. Sin embargo, busco inspeccionarlo y verificarlo a través de la automatización.

Actualizar

El código utilizado para contactnu.setError("Invalid phone number."); validación es: contactnu.setError("Invalid phone number.");


¿Por qué no tratar de buscar con expresiones regulares como:

public boolean IsValidationFired() { try{ WebElement invalid = driver.findElement(By.xpath("//*[@text=''Invalid phone number.'']")); //You could check if @text contains just invalid Invalid //WebElement invalid = driver.findElement(By.xpath("//*[contains(@text, ''Invalid'')]]")); if(invalid != null) { System.out.println("PASS"); } else { System.out.println("FAIL"); } }catch(NoSuchElementException ex){ System.out.println("Element not found"); } }

De todos modos, esta no es una solución realmente buena (* en xpath) ... Solo úsala para probar. La búsqueda será lenta ... Si encuentra el elemento, tendrá que hacer una mejor solución XPATH ...

Nota: Después de encontrar su elemento, para averiguar si es un TextView, Toast, ... sugiero hacer esto:

System.out.println(invalid.getAttribute("className")); //This will print something like: "android.widget.TextView"


He estado haciendo la automatización de pruebas de aplicaciones Android desde los últimos 2 años. He encontrado el mismo problema muchas veces. Desafortunadamente, uiAutomator no detecta este tipo de elementos por lo que no podemos realizar ninguna acción en dichos elementos.

Appium envía comandos internamente a uiAutomator y uiAutomatar realiza las acciones en el dispositivo. uiAutomator puede realizar acciones si uiAutomator ve esos elementos.

Por lo tanto, le sugiero que no dedique mucho tiempo al uso de java script o xPath porque ya he probado con soluciones de mangueras, pero ninguna de ellas funcionó.

Sin embargo, hay una solución que es muy larga. Puede tomar una captura de pantalla de esta pantalla desde el dispositivo y almacenarla en su máquina en el tiempo de ejecución y verificar si el texto "Número de teléfono no válido". Está disponible en la imagen usando SIKULI. O bien, puede pedirle al desarrollador que cambie el mensaje de error a algún componente visible en el uiAutomator. Espero que esto te ayude.