Не удается найти n-й элемент на странице с помощью nth-child и WebDriver - PullRequest
1 голос
/ 31 января 2012

У меня есть форма, которая имеет 4 виджета календаря. Источник HTML одинаков для всех виджетов.

<div class="grid_12">
<td class="wikicell">
    <div class="Item">
        <div class="Value">
            <input type="hidden" id="Submit_Date$_type" value="Date,99/99/9999">
            <input id="Submit_Date" size="40" value="" type="text">
            <a href="javascript:" class="Calendar">
                <img src="transparent.gif" class="Placeholder" tabindex="-1" align="absmiddle">
            </a>
        </div>
    </div>
</td>

Я могу найти первый календарь, используя следующий код:

driver.findElement(By.cssSelector("div.grid_12 img.Placeholder"), 15).click();

Но когда я пытаюсь расположить 2-й, 3-й и 4-й календари, используя nth-child (2) / (3) или (4), я получаю «Невозможно найти элемент: {» method »:« css selector », "селектор": "div.grid_12 img.Placeholder: nth-child (2)"}

Я также пытался с «a.Calendar», «div.grid_12 img» работать также для первого календаря. Эти 3 селектора могут успешно щелкнуть и открыть первый виджет календаря при использовании с «nth-child (1)», но не для следующих 3.

Я использовал Thread.sleep (3000) после закрытия первого календаря, но в итоге получаю ту же ошибку.

Я использовал метод findElements (), чтобы получить все виджеты календаря, и дважды проверил, используя size (), чтобы проверить, находит ли WebDriver все элементы календаря. Результат 4, как и ожидалось.

Не правильно ли я использую nth-child?

1 Ответ

4 голосов
/ 01 февраля 2012

Сначала я нашел форму / таблицу с этими значками календаря и вызвал findElement () для этого элемента в качестве ссылки для поиска соответствующих календарей. Вот решение -

WebElement form = uiHelper.waitForElementPresent(By.cssSelector("table.left tbody"), 15);
//Enter time
form.findElement(By.cssSelector("tr:nth-child(3) td:nth-child(2) img")).click();
form.findElement(By.cssSelector("tr:nth-child(4) td:nth-child(2) img")).click();
...