Несколько элементов пользовательского интерфейса из таблицы в массив - PullRequest
0 голосов
/ 05 июня 2018

Я пишу тесты Selenium на Java, где мой скрипт сначала выполняет запрос к исходной системе и собирает ожидаемые результаты.В этом примере мой запрос возвращает 4 номера элементов, которые я затем хочу сопоставить с таблицей в пользовательском интерфейсе, чтобы эти 4 номера элементов отображались в таблице.Я также должен убедиться, что в пользовательском интерфейсе отображается не более или менее, чем эти 4 номера участника.Запрос может возвращать, скажем, 3 или 5 номеров членов, когда исходные данные системы меняются, поэтому мне нужно, чтобы мой тест был достаточно умным, чтобы знать, сколько номеров членов искать, основываясь на результатах запроса.

Я думаю, что мой подход к утверждению результатов запроса к пользовательскому интерфейсу состоит в том, чтобы получить оба набора данных в массив и выполнить равные утверждения, чтобы убедиться, что они совпадают друг с другом.

Мой пользовательский интерфейс имеет видследует:

<tbody>
        <tr data-ng-repeat="member in searchresult" class="ng-scope odd" role="row">
            <td class="ng-binding sorting_1">27002</td>
            <td class="ng-binding">Test</td>
            <td class="ng-binding">Test</td>
            </td>
        </tr><tr data-ng-repeat="member in searchresult" class="ng-scope even" role="row">
            <td class="ng-binding sorting_1">55691</td>
            <td class="ng-binding">Standard</td>
            <td class="ng-binding">PGY2 TESTED</td>
            </td>
        </tr><tr data-ng-repeat="member in searchresult" class="ng-scope odd" role="row">
            <td class="ng-binding sorting_1">58716</td>
            <td class="ng-binding">Standard</td>
            <td class="ng-binding">PGY3 TESTED</td>
            </td>
        </tr><tr data-ng-repeat="member in searchresult" class="ng-scope even" role="row">
            <td class="ng-binding sorting_1">95362</td>
            <td class="ng-binding">Standard</td>
            <td class="ng-binding">STUDENT tested</td>
            </td>
        </tr></tbody>
</table>

Вы можете видеть, что 4 номера членов всегда отображаются в классе "ng-binding sorting_1".Мне интересно, как я могу написать локаторы, чтобы захватить каждый из них и поместить их в массив.

Также откройте, чтобы услышать различные подходы, если это не способ пойти на эту проверку.

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Вызовите driver.findElements(), чтобы получить все тдс в первом столбце таблицы.

String locator = "tbody > tr[data-ng-repeat='member in searchresult'] > td.sorting_1";

List<WebElement> tds = driver.findElements(By.cssSelector(locator));

ArrayList<String> memberNums = new ArrayList<String>()

for(WebElement ele : tds) {
  memberNums.add(ele.getText());
}
0 голосов
/ 05 июня 2018

Он загрузит все значения внутри td.

    List<WebElement> tableElements =  driver.findElements(By.xpath("//tbody//*");

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

    for (WebElement tableElement: tableElements ) {
             tdDetails.add(tableElement.getText());

     }

Если вы хотите получить все значения внутри td class = "ng-binding sorting_1

необходимо следоватьниже шагов.

String attributeValue = "ng-binding sorting_1";
List<WebElement> tableElements =  driver.findElements(By.xpath("//tbody//*");

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

        for (WebElement tableElement: tableElements ) {

                if(tableElement.getAttribute("class")!=null && tableElement.getAttribute("class")==attributeValue){

                      tdDetails.add(tableElement.getText());
                }


         }
0 голосов
/ 05 июня 2018

Вот код для итерации каждой строки таблицы.Я надеюсь, что вы можете относиться к этому сейчас

    List<WebElement> rows = driver.findElements(By.Id("DataTables_Table_0"));


    // Now using Iterator we will iterate all elements
    Iterator<WebElement> iter = rows.iterator();

    // this will check whether list has some element or not
    while (iter.hasNext()) {

        // Iterate one by one
        WebElement item = iter.next();

        // get text
        String label = item.getText();
...