Проблема при нажатии на каждый элемент и выполнении действия - PullRequest
0 голосов
/ 15 января 2019

У меня есть веб-таблица, которая состоит из нескольких строк. Я хочу создать цикл таким образом, чтобы он проходил по всем строкам этой таблицы и нажимал на элементы столбца 1 первой строки, а затем проверял, существует ли кнопка «Правка» или нет. Затем вернитесь и нажмите на следующий элемент и нажмите кнопку редактирования. Затем вернитесь и повторите, пока все ряды не пройдены.

Но в текущем коде, реализованном мной, он просто пересекает первую строку и затем завершается. Может ли кто-нибудь помочь мне с тем же.

    viewDiscussionScope(driver, scope);
    WebElement paginationLabel = WaitUtils.waitForElement(driver, By.cssSelector(".v-csslayout-cvr-c-pagination__header"));
    if(paginationLabel.isDisplayed())
    {
        WebElement table = WaitUtils.waitForElement(driver, By.cssSelector("table.eds-o-table.cvr-c-table--list tbody"));
        List<WebElement> rows = table.findElements(By.cssSelector("tr.eds-o-table__row"));
        for(WebElement row: rows)
            {
                List<WebElement> tableCols = row.findElements(By.cssSelector("td.eds-o-table__cell:nth-of-type(1)"));
                for(WebElement col : tableCols)
                {
                    col.findElement(By.cssSelector(".v-label-eds-c-text--bold")).click();
                    WebElement messageField = WaitUtils.waitForElement(driver, By.cssSelector(".eds-o-media__body-eds-o-media__body--top .v-label-eds-u-flexitext.v-label-undef-w:nth-of-type(1)"));
                    String messageText = messageField.getText();
                    boolean editLabel = (driver.findElement(By.cssSelector(".eds-c-button-set-eds-c-button-set--align-right .v-button-eds-s-is-first")).getText()).equals("Edit");
                    if(!(editLabel))
                    {
                        LOG.info(messageText+" is not editable by the logged in user");                         
                    }
                    else
                    {
                        LOG.info(messageText+" is editable by the logged in user");                         
                    }
                    break;
                }
                break;
            }           
    }
}

Ответы [ 4 ]

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

Если бы вы могли предоставить DOM таблицы, над которой вы пытаетесь работать, я могу помочь вам лучше.

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

попробуйте это:

 if (paginationLabel.isDisplayed())
{
    WebElement table = WaitUtils.waitForElement(driver, By.cssSelector("table.eds-o-table.cvr-c-table--list tbody"));
    List<WebElement> rows = table.findElements(By.cssSelector("tr.eds-o-table__row"));
    for (int i=1; i<=rows.size; i++)
    {

        // get first td

       clickColumn(int i);
       getMessageText(int i);
        boolean editLabel = (driver.findElement(By.cssSelector(".eds-c-button-set-eds-c-button-set--align-right .v-button-eds-s-is-first")).getText()).equals("Edit");
        if (!(editLabel))
        {
            LOG.info(messageText + " is not editable by the logged in user");
        }
        else
        {
            LOG.info(messageText + " is editable by the logged in user");
        }
    }
}

private clickColumn(int position) {
 WebElement tableCol = row.findElement(By.cssSelector("td.eds-o-table__cell:nth-of-type(" + position + ")"));
            tableCol.findElement(By.cssSelector(".v-label-eds-c-text--bold")).click();
}

private getMessageText(int position) {
WebElement messageField = WaitUtils.waitForElement(driver, By.cssSelector(".eds-o-media__body-eds-o-media__body--top .v-label-eds-u-flexitext.v-label-undef-w:nth-of-type(" + position + ")"));
            String messageText = messageField.getText();
}
0 голосов
/ 15 января 2019

У вас есть 2 break, которые необходимо удалить, и вам не нужно перебирать td, если вы хотите нажать только сначала td

if (paginationLabel.isDisplayed())
{
    WebElement table = WaitUtils.waitForElement(driver, By.cssSelector("table.eds-o-table.cvr-c-table--list tbody"));
    List<WebElement> rows = table.findElements(By.cssSelector("tr.eds-o-table__row"));
    for (WebElement row :  rows)
    {
        // get first td
        WebElement tableCol = row.findElement(By.cssSelector("td.eds-o-table__cell:nth-of-type(1)"));
        tableCol.findElement(By.cssSelector(".v-label-eds-c-text--bold")).click();
        WebElement messageField = WaitUtils.waitForElement(driver, By.cssSelector(".eds-o-media__body-eds-o-media__body--top .v-label-eds-u-flexitext.v-label-undef-w:nth-of-type(1)"));
        String messageText = messageField.getText();
        boolean editLabel = (driver.findElement(By.cssSelector(".eds-c-button-set-eds-c-button-set--align-right .v-button-eds-s-is-first")).getText()).equals("Edit");
        if (!(editLabel))
        {
            LOG.info(messageText + " is not editable by the logged in user");
        }
        else
        {
            LOG.info(messageText + " is editable by the logged in user");
        }
    }
}
0 голосов
/ 15 января 2019

сначала вам нужно найти, где находится кнопка редактирования, расположенная в таблице, вы можете найти ее xpath, из всех кнопок редактирования, имеющих одинаковый xpath, если да, то ваша проблема будет решена, вам просто нужно найти методом findElements () и сохранить в список и для получения значения кнопок редактирования или для проверки доступности или нет, вы можете вызвать метод .get (), который получит все уважаемые кнопки с одинаковым xpath и указав индекс как .get (0),. get (1) ) или передав его в цикле, вы получаете его значение методом .getText () и проверяете или выполняете действия над этим

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

Удалить break оператор из вашего родительского for цикла!

for(WebElement row: rows)
{
            List<WebElement> tableCols = row.findElements(By.cssSelector("td.eds-o-table__cell:nth-of-type(1)"));
            for(WebElement col : tableCols)
            {
               // your code
            }

          // REMOVE => break;
        }           
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...