使用nth-child和WebDriver在页面上找不到第n个元素

时间:2012-01-30 22:20:40

标签: css-selectors webdriver

我有一个包含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();

但是当我尝试使用nth-child(2)/(3)或(4)找到第2,第3和第4个日历时,我得到一个“无法找到元素:{”方法“:”css选择器“, “selector”:“div.grid_12 img.Placeholder:nth-​​child(2)”}

我也试过“a.Calendar”,“div.grid_12 img”也适用于第一个日历。当与“nth-child(1)”一起使用时,这3个选择器可以成功点击并打开第一个日历小部件,但不能用于下一个3。

我在第一个日历关闭后使用了Thread.sleep(3000),但最终得到了同样的错误。

我使用findElements()方法获取所有日历小部件,并使用size()仔细检查以检查WebDriver是否正在查找所有日历元素。结果是预期的4。

我没有正确使用'n-child'吗?

1 个答案:

答案 0 :(得分:4)

我首先找到包含这些日历图标的表单/表,并在此元素上调用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();