Estoy automatizando https://www.zoho.com/login.html . Esta página tiene una sección de inicio de sesión dentro de un marco. Cuando cambio a través de diferentes marcos y busco mi campo Correo electrónico/Teléfono (sección Iniciar sesión), puedo encontrarlo y luego usar el bloque de trabajo (abajo) pero no puedo usar el código similar (también a continuación) la única diferencia entre dos bloques es como he identificado mi elemento userNameInputBox.
//Esto esta funcionando
List<WebElement> iframeElements = driver.findElements(By.tagName("iframe")); int nFrames = iframeElements.size(); //Switching frame to go to login frame for (int i=0; i<=nFrames ; i++) { System.out.println("nFrames: " +nFrames); driver.switchTo().frame(i); if (driver.findElement(By.name("lid")).isDisplayed()){ driver.findElement(By.name("lid")).sendKeys("myuserName1"); }}
Sin embargo, si uso esto (debajo del código) no funciona y en su lugar me da NullPointerException en la línea donde hago clic en mi entrada de nombre de usuario en el campo de nombre de usuario.
///Esto no está funcionando
//Elements @FindBy(name="lid") WebElement userNameInput; //Switching frame to go to login frame for (int i=0; i<=nFrames ; i++) { System.out.println("nFrames: " +nFrames); driver.switchTo().frame(i); if (driver.findElement(By.name("lid")).isDisplayed()){ userNameInput.click(); //clicking the inputBox userNameInput.sendKeys("myuserName"); //Sendingkeys into }}
¿Alguien puede explicar cuál podría ser la razón de tal anomalía? O señalar lo que me he perdido? Quiero usar @FindBy para WebElement.
La etiqueta @FindBy
está diseñada para funcionar con el modelo de objeto de página. Para usarlo, debe inicializar el objeto de la página con PageFactory para que los campos se inicialicen y luego el controlador web los "encuentre".
Consulte https://github.com/SeleniumHQ/selenium/wiki/PageFactory para obtener la documentación al respecto.
Entonces, antes de intentar usar el campo userNameInput
, deberá tener algún tipo de línea como
PageFactory.initElements(driver, page);
(donde la page
var es una clase que usa la anotación @FindBy
.