package com.constellio.app.ui.tools.components.listAddRemove; import java.util.ArrayList; import java.util.List; import org.openqa.selenium.By; import com.constellio.app.ui.framework.components.fields.list.ListAddRemoveField; import com.constellio.app.ui.tools.components.basic.TextFieldWebElement; import com.constellio.sdk.tests.selenium.adapters.constellio.ConstellioWebElement; import com.constellio.sdk.tests.selenium.adapters.constellio.ConstellioWebTableElement; import com.constellio.sdk.tests.selenium.conditions.ConditionWithTimeout; public abstract class ListAddRemoveFieldWebElement<T> { ConstellioWebElement nestedElement; public ListAddRemoveFieldWebElement(ConstellioWebElement nestedElement) { this.nestedElement = nestedElement; } public T getInputComponent() { return wrapInputElement(getInputElement()); } public T getInputDateComponent() { return wrapInputElement(getInputDateElement()); } protected abstract T wrapInputElement(ConstellioWebElement element); public ListAddRemoveFieldWebElement clickAdd() { final int valuesCount = getValues().size(); getAddButtonWebElement().sendKeys(""); getAddButtonWebElement().click(); new ConditionWithTimeout() { @Override protected boolean evaluate() { return getModifyButtonWebElement(valuesCount) != null; } }.waitForTrue(1000); return this; } public List<String> getValues() { List<String> values = new ArrayList<>(); ConstellioWebElement tableDiv = nestedElement.findElement(By.className(ListAddRemoveField.TABLE_STYLE_NAME)); ConstellioWebTableElement table = tableDiv.find("v-table-body").findTableElement(By.tagName("table")); for (ConstellioWebElement element : table.getRows()) { ConstellioWebElement firstColumn = element.findElement(By.tagName("td")); ConstellioWebElement firstColumnLabel = firstColumn.findElement(By.className("v-label")); values.add(firstColumnLabel.getText()); } return values; } public ListAddRemoveFieldWebElement remove(int index) { int valuesCount = getValues().size(); ConstellioWebElement lastElement = getModifyButtonWebElement(valuesCount - 1); ConstellioWebElement deleteElement = getRemoveButtonWebElement(index); deleteElement.click(); lastElement.waitForRemoval(); return this; } public ListAddRemoveFieldWebElement clickModify(int index) { int valuesCount = getValues().size(); ConstellioWebElement lastElement = getModifyButtonWebElement(valuesCount - 1); getModifyButtonWebElement(index).click(); lastElement.waitForRemoval(); return this; } protected ConstellioWebElement getInputElement() { return nestedElement.findElement(By.className(ListAddRemoveField.ADD_EDIT_FIELD_STYLE_NAME)); } protected ConstellioWebElement getInputDateElement() { return nestedElement.findElement(By.className("v-datefield-textfield")); } public ConstellioWebElement getAddButtonWebElement() { return nestedElement.findElement(By.className(ListAddRemoveField.ADD_BUTTON_STYLE_NAME)); } public ConstellioWebElement getModifyButtonWebElement(int i) { return nestedElement.findAdaptElements(By.className(ListAddRemoveField.EDIT_BUTTON_STYLE_NAME)).get(i); } public ConstellioWebElement getRemoveButtonWebElement(int i) { return nestedElement.findAdaptElements(By.className(ListAddRemoveField.REMOVE_BUTTON_STYLE_NAME)).get(i); } }