es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Excepción de WebDriver cuando se hace clic en el botón “OK” en un diálogo de Anyline.

Así que todo lo que quiero hacer es hacer clic en el diálogo que solo aparece en el emulador de iOS (iOS 14.5, Appium Java-Client 7.3.0).

El diálogo proviene de Anyline porque, por supuesto, no tengo cámara en el emulador.
Si hay alguna manera de ocultar este diálogo, también resolvería mi problema, pero lo intenté con las capacidades y no funcionó.

cap.setCapability(“autoAcceptAlerts”, false);
cap.setCapability(“autoDismissAlerts”, false);

Seleccionar el diálogo no es un problema, puedo verificar que el diálogo está aquí:

@iOSXCUITFindBy(accesibilidad = “Anyline SDK cutout UI”)
public IOSElement anylineDialog;

Así es como se ve:

Imagen

Por lo tanto, el siguiente paso sería simplemente hacer clic en el botón de OK, funcionó al principio, pero ahora ni siquiera puedo seleccionarlo en el Inspector de Appium. Antes solo usaba esto:

@iOSXCUITFindBy(accesibilidad = “OK”)
public IOSElement okButton;

No sé por qué ya no funciona, pero aún puedo seleccionarlo con la ayuda de TestProject.
Probé muchos selectores diferentes, pero no funcionaron (el que tiene accesibilidad = “OK” también se recomienda en esta herramienta).

Siempre obtengo esta excepción y no sé cómo solucionarlo, try catch tampoco funciona:

org.openqa.selenium.WebDriverException: Se produjo un error desconocido en el servidor al procesar el comando. Error original: *** -[__NSArrayM insertObject:atIndex:]: el objeto no puede ser nulo

Probé el material en esta página y también obtengo el botón OK como el único botón, como muestra este fragmento de código.

HashMap<string, string=””> args = new HashMap<>();
args.put(“action”, “getButtons”);
List buttons = (List)driver.executeScript(“mobile: alert”, args);

También desde el mismo sitio, probé esto con el mismo resultado.

args.put(“action”, “accept”);
args.put(“buttonLabel”, “OK”);
driver.executeScript(“mobile: alert”, args);

Tal vez esto sea demasiado específico, pero si alguien tiene una idea de cómo podría resolverlo, estaría muy agradecido.</string,>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para hacer clic en el diálogo de Anyline en el simulador de iOS.

    Para hacer clic en el diálogo de Anyline en el simulador de iOS utilizando Appium Java-Client 7.3.0, puedes intentar los siguientes pasos:

    • Intenta ocultar el diálogo configurando las capacidades siguientes, sin embargo, es posible que no funcione en tu caso.
    cap.setCapability("autoAcceptAlerts", false);
    cap.setCapability("autoDismissAlerts", false);
    
    • Si el diálogo sigue siendo visible, puedes seleccionarlo utilizando su identificador de accesibilidad como se muestra a continuación:
    @iOSXCUITFindBy(accessibility = "Anyline SDK cutout UI")
    public IOSElement anylineDialog;
    
    • Para hacer clic en el botón OK, puedes utilizar su identificador de accesibilidad como se muestra a continuación:
    @iOSXCUITFindBy(accessibility = "OK")
    public IOSElement okButton;
    
    • Si el código anterior no funciona, puedes intentar utilizar la herramienta TestProject para identificar el botón OK y obtener su Xpath.

    • Una vez que obtengas el Xpath, puedes utilizarlo para encontrar el botón OK y hacer clic en él, como se muestra a continuación:

    driver.findElement(By.xpath("/Xpath/To/OK/Button")).click();
    
    • Si aún enfrentas el error “*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil” mientras haces clic en el botón OK, puedes intentar el siguiente código para aceptar la alerta:
    HashMap<string, string=""> args = new HashMap<>();
    args.put("action", "accept");
    args.put("buttonLabel", "OK");
    driver.executeScript("mobile: alert", args);
    
    • Si el código anterior aún no funciona, puedes intentar el código de esta página para obtener los botones y hacer clic en el botón OK.

    • Por último, asegúrate de que la versión del servidor de Appium y la versión del cliente de Java de Appium sean compatibles entre sí y también verifica si los registros del servidor de Appium proporcionan alguna información adicional sobre el error.</string,>

Comments are closed.