Флажок с div.span не нажимает - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь установить флажок в таблице результатов на веб-странице, это типичный столбец выбора в этой строке. Но это не нажимает на это. Я перепробовал все возможные способы, проверяя с помощью прямой isSelected (), проверки типа и даже опции javascript executor. Не могли бы вы дать мне знать, что не так в моем коде? Также, пожалуйста, предложите с подходящим ответом.

Соответствующий html код .

<tbody id="frmResults:USTTaxTableId_data" class="ui-datatable-data ui-widget-content">
    <tr data-ri="0" data-rk="123456789" class="ui-widget-content ui-datatable-even ui-datatable-selectable" role="row" aria-selected="false">
        <td role="gridcell" class="ui-selection-column">
            <div class="ui-chkbox ui-widget">
                <div class="ui-helper-hidden-accessible">
                    <input type="checkbox" name="frmResults:USTTaxTableId_checkbox" aria-checked="false">
                </div>
                <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default">
                    <span class="ui-chkbox-icon ui-icon ui-icon-blank ui-c"/>
                </div>
            </div>
        </td>
        <td role="gridcell" class="ui-active-state">0003784</td>
        <td role="gridcell" class="ui-active-state">09/21/2017</td>
        <td role="gridcell" class="ui-active-state">09/21/2017</td>
        <td role="gridcell" class="ui-active-state"/>
    </tr>
</tbody>

Мой сценарий ...

WebElement row = ele.findElement(By.cssSelector("tr[data-ri=\"" + row_num + "\"]"));
String isSelected = row.getAttribute("aria-selected");

scenario.write("isSelected is : " + isSelected);

//WebElement rowCheckBox = row.findElement(By.className("ui-selection-column"));
WebElement rowCheckBox = row.findElement(By.xpath("//td[@class=\"ui-selection-column\"]"));

if (isSelected.equalsIgnoreCase("false")) {
    WebElement box = rowCheckBox.findElement(By.xpath("//div/div[2]"));
    JavascriptExecutor js = (JavascriptExecutor) browser;
    js.executeScript("arguments[0].click();", box);
    isSelected = row.getAttribute("aria-selected");
    scenario.write("isSelected in inside is : " + isSelected);
}

1 Ответ

1 голос
/ 24 января 2020

Проблема может быть в том, что страница не загружена. Используйте WebDriverWait и попробуйте дождаться кликабельности checkbox.

WebDriverWait wait = new WebDriverWait(driver, 10);

WebElement row = ele.findElement(By.cssSelector("tr[data-ri=" + row_num + "]"));
String isSelected = row.getAttribute("aria-selected");
scenario.write("isSelected is : " + isSelected);

if (isSelected.equalsIgnoreCase("false")) {
    wait.until(ExpectedConditions.elementToBeClickable(row.findElement(By.cssSelector(".ui-chkbox-box")))).click();

    isSelected = row.getAttribute("aria-selected");
    scenario.write("isSelected in inside is : " + isSelected);
}

Если не получится, добавьте приведенный ниже код, прежде чем нажимать:

wait.until(d -> ((JavascriptExecutor) d)
        .executeScript("return document.readyState !== 'loading'"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...