Selenium ChromeDriver: aumenta el tiempo de obtención de WebElement Text

Tengo un código en el que recorro las filas y columnas de la tabla, y me gustaría agregar sus valores a una lista.

e lleva mucho tiemp

e modo que agregué una medición de tiempo y noté que, por alguna razón, el tiempo aumenta de fila en fila.

No puedo entender por qué.

¿Puedes aconsejar por favor?

private void buildTableDataMap() {

    WebElement table = chromeWebDriver.findElement(By.id("table-type-1"));

    List<WebElement> rows = table.findElements(By.tagName("tr"));

    theMap.getInstance().clear();

    String item;
    for (WebElement row : rows) {

        ArrayList<String> values = new ArrayList<>(); 

        List<WebElement> tds = row.findElements(By.tagName("td"));

        if(tds.size() > 0){

            WebElement last = tds.get(tds.size() - 1);

            long time = System.currentTimeMillis();

            values.addAll(tds.stream().map(e->e.getText()).collect(Collectors.toList()));

            System.out.println(System.currentTimeMillis() - time);

            //remove redundant last entry:
            values.remove(tds.size() - 1);
            callSomeFunc(values, last);

            item = tds.get(TABLE_COLUMNS.NAME_COL.getNumVal()).getText();
            item = item.replaceAll("[^.\\- /'&A-Za-z0-9]", "").trim();//remove redundant chars

            theMap.getInstance().getMap().put(item, values);
        }
    }
}

Chicos, continué investigando. En primer lugar, la amable respuesta de Florent no me ayudó porque, según tengo entendido, me devolvió una lista de cadenas que tuve que analizar, y no me gusta demasiado este tipo de solución ...

e modo que resolví el problema al encontrar que el e.getText ()@ call aumentaba en el tiempo de llamada a llamada! También probé e.getAttribute ("innerText") en cambio, pero sin cambios. No puedo entender por qué. ¿Alguna idea para resolver?

            WebElement last = null;
            for (WebElement e : tds){
                last = e;

                long tm1 = 0, tm2 = 0;
                if(Settings.verboseYN) {
                    tm1 = System.currentTimeMillis();
                }
                s = e.getText(); //This action increases in time!!!
                if(Settings.verboseYN) {
                    tm2 = System.currentTimeMillis();
                }
                values.add(s); //a 0 ms action!!!
                if(Settings.verboseYN) {
                    System.out.println("e.getText()) took " + (tm2 - tm1) + " ms...");
                }
            }

Este es un gráfico del tiempo que tomó GetText ...

08-may-18 Otra fuente de tiempo de ejecución creciente es esta:

void func(WebElement anchorsElement){

    List<WebElement> anchors = anchorsElement.findElements(By.tagName("a"));

    for (WebElement a : anchors) {

        if (a.getAttribute("class").indexOf("a") > 0)
            values.add("A");
        else if (a.getAttribute("class").indexOf("b") > 0)
            values.add("B");
        else if (a.getAttribute("class").indexOf("c") > 0)
            values.add("C");

    }
}

Cada función tiene solo 5 iteraciones, pero aun así cada llamada a la función aumenta su tiempo de ejecución. ¿Hay alguna solución para este también?

Respuestas a la pregunta(2)

Su respuesta a la pregunta