Estoy siguiendo el patrón de objeto de página sugerida por selenio, pero ¿cómo iba a crear un WebElement más especializado para una página. Específicamente, tenemos tablas en nuestras páginas y he escrito algunas funciones auxiliares para obtener filas específicas de una tabla, devolver el contenido de una tabla, etc.Amplíe Selenium WebDriver WebElement?
Actualmente, aquí hay un fragmento de un objeto de página que creé que tiene una tabla:
public class PermissionsPage {
@FindBy(id = "studyPermissionsTable")
private WebElement permissionTable;
@FindBy(id = "studyPermissionAddPermission")
private WebElement addPermissionButton;
...
}
Por lo tanto, lo que me gustaría hacer es tener que permissionsTable a ser un WebElement más personalizada que cuenta con algunos de los métodos que he mencionado antes.
Por ejemplo:
public class TableWebElement extends WebElement {
WebElement table;
// a WebDriver needs to come into play here too I think
public List<Map<String, String>> getTableData() {
// code to do this
}
public int getTableSize() {
// code to do this
}
public WebElement getElementFromTable(String id) {
// code to do this
}
}
Espero que esto tiene sentido lo que estoy tratando de explicar. Creo que lo que estoy buscando es una forma de tener este WebElement personalizado para hacer algunas cosas adicionales que son específicas de la tabla. Agregue este elemento personalizado a una página y aproveche la forma en que Selenium conecta los elementos a la página según las anotaciones.
¿Es posible? Y si es así, ¿alguien sabe cómo se puede hacer esto?
Así es como yo lo hice también, pero un poco diferente ... Creé una clase abstracta que implementa una interfaz personalizada que extiende la interfaz WebElement. cargó todos los métodos en el resumen y agregó métodos en la clase final. Y en mi InvocationHandler, intercepté el método y lo redirigí a los métodos del objeto webelement si están declarados en la interfaz de webelement; de lo contrario, envolví el elemento con el envoltorio webelement personalizado; e invocó el método. PD. +1 para el blog :) ¡gracias! – rrw