Список элементов таблицы, найденных Xpath, содержит только видимые десять элементов с правильными текстовыми значениями, которые могут быть получены методом getText () - PullRequest
0 голосов
/ 01 января 2019
  1. Я хочу получить список объектов WebElement из складной таблицы и пройти по нему, получая тексты с помощью метода getText () в случае, если количество элементов больше 10. Для пользователя видны только 10 столбцов.

  2. Моя таблица оформлена и отображает только 10 столбцов одновременно, поэтому findElements получает только эти десять имен столбцов.

Код, который яиспользуется для получения значений моего столбца: Код:

public void getColumnsList() throws Exception{
    List<WebElement> elements = driver.findElements(By.xpath(//*[contains(@id, 'window-')]//*[contains(@id, '-textContainerEl')]));
    for (WebElement el:elements){
        System.out.println(elements.indexOf(el)+" element "+el.getText());
    }
}

Ожидаемый результат:

0 element Column1 
1 element Column2 
2 element Column3 
3 element Column4 
4 element Column5 
5 element Column6 
6 element Column7 
7 element Column8 
8 element Column9 
9 element Column10 
10 element Column11 
11 element Column12 
12 element Column13 
13 element Column14
14 element Column15

Фактический результат:

0 element Column1 
1 element Column2 
2 element Column3 
3 element Column4 
4 element Column5 
5 element Column6 
6 element Column7 
7 element Column8 
8 element Column9 
9 element Column10 
10 element 
11 element 
12 element 
13 element 
14 element 

1 Ответ

0 голосов
/ 04 января 2019

Поскольку driver.findElements всегда видит только видимую часть моей изменяемой таблицы, было необходимо напрямую получать текстовые значения в отдельные списки, перемещаясь по всем ячейкам всей строки (мне также понадобились ячейки первой строки):

public TableElements getTableElements() throws Exception {
    if (getColumnsList()!=null) {

        List<WebElement> elements = getColumnsList();
        List<String> columnNames = new ArrayList<>();
        List<String> rowValues = new ArrayList<>();
        ListIterator<WebElement> listItr = null;
        int columnsNumber = elements.size();
        System.out.println("columnsNumber is: " + columnsNumber + " in " + driver.findElement(By.xpath(datasource)).getText());
        WebElement cell = driver.findElement(By.xpath(getValue("firstColumnXpath")));
        cell.click();
        listItr = elements.listIterator();
        while (listItr.hasNext()) {
            columnNames.add(listItr.next().getText());
            rowValues.add(driver.switchTo().activeElement().getText());
        driver.switchTo().activeElement().sendKeys(Keys.ARROW_RIGHT);
        }
        return new TableElements(columnNames, rowValues);
    }
    else {
        return new TableElements(null, null);
    }
}

public List<WebElement> getColumnsList() throws Exception {
    if (CSSElementExists(getValue("columnLabelsCSS")))
        return driver.findElements(By.xpath(getValue("columnLabelsXpath")));
    return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...