toolsqa pom pattern pagefactory page objects method example webdriver selenium-webdriver

webdriver - pom - pagefactory in selenium



Selenium Webdriver y PageFactory inicializan los elementos List<WebElement> (5)

Aquí está la solución estándar de lo que hago en nuestro marco de prueba, hasta que @FindAllBy no funciona en la biblioteca de Selenium:

private List<WebElement> selects; public List<WebElement> getSelects() { selects = getDriver().findElements(By.xpath("...")); return selects; }

He buscado en Selenium Webdriver APi docs alojado en el código de google. Actualmente estoy usando PageFactory para iniciar mis objetos de página, pero tengo problemas para iniciar una lista de WebElement.

Lo que necesito es una forma de inicializar una lista de elementos, idealmente una lista de cuadros de selección desplegables.

He analizado las referencias de la API a @Findsby y @ByChained, pero todavía no puedo encontrar la mejor manera de iniciar una lista de cuadros de selección desplegables. PODRÍA tener un WebElement separado para cada uno y obtener la ID, pero me gustaría iniciar una lista de Selecciones de listas

Actualmente uso lo siguiente:

public class PageObject { @FindBy(id="element_id") private WebElement element; public getElement() { return element; } }

¿Hay alguna forma en que pueda usar algo similar a lo siguiente que busco:

public class PageObject { @FindBys(className="selectItmes") private List<WebElement> selects; public List<WebElement> getSelects() { return selects; } }

¿O debo usar un elemento web único para cada elemento? :(

Actualizar

Alguien sabe cómo usar PageFactory e initlize a List elements; usando la anotación FindsBy. No puedo encontrar ninguna forma de hacerlo, pero hay problemas de Google en el sitio de Google Docs de selenio que dicen que esto se ha solucionado en las vinculaciones de la API de Java y en la versión 2.12, ya que se deshabilitó por error en 2.11 ... todavía puedo '' t inicializa una lista. = /


Esta característica se ha agregado recientemente en Selenium 2.0. Verifique este problema . Está arreglado ahora.

De los documentos, podrías hacer algo como,

@FindAllBy(className="selectItmes") List<WebElement> selects;

Si estás interesado en el código, mira esto


Puede encontrar las opciones de selección con bastante facilidad. Todo lo que tiene que hacer es utilizar la referencia Webdriver.Support dll. Esto le da acceso a la clase SelectElement. Aquí hay un ejemplo rápido:

IWebElement element = driver.FindElement(By.TagName("select")); SelectElement select = new SelectElement(element); int options = element.FindElements(By.TagName("option")).Count(); select.SelectByIndex(new Random().Next(1, options - 1));

El código anterior encuentra el elemento seleccionado, obtiene un recuento de las opciones en ese elemento de selección y luego elige uno al azar.

El código puede ser ligeramente diferente porque mi código está escrito en C #


Resuelvo este problema así:

@FindBy(id="element_id") public List<WebElement> selects;

Ahora tiene una lista de todos los elementos web con esa ID.

Luego, simplemente toma el elemento de la lista como lo haría con cualquier otra lista de elementos de Web de PageFactory.


@FindBys(@FindBy(xpath="//span[@class=''ng-binding'']")) private List<WebElement> AllData; public List<WebElement> getAllData() { return AllData; }