查找相对于另一个WebElement的WebElement

时间:2015-04-02 16:35:04

标签: java selenium selenium-webdriver

我试图找到一个相对于另一个使用Selenium而不是另一个孩子的webelement。以下是我正在使用的源代码片段。

<td class="action" rowspan="7">
    <table class="action">
        <tbody>
            <tr class="topTr topTrPlainBg">
            <tr>
                <td class="middleLeftPlainBg" style="width: 4px;">
                <td class="caption" style="width: 99%; height: 215px;" colspan="4" title="Action properties">
                    <a href="javascript: var none=0;">Foo bar</a>
                </td>
                <td class="middleRightPlainBg" style="width: 4px;">
            </tr>
            <tr class="bottomTr bottomTrPlainBg">
        </tbody>
    </table>
</td>
<td class="rule rulePlainBg" colspan="1">
    <table class="rule rulePlainBg">
        <tbody>
            <tr>
                <td class="captionRule">Successful</td>
                <td class="plus">
                    <img src="https://mcc-69-77.usae.bah.com/sam/admin/vpe2/public/img/vpe-old/rule/plus-over.gif" title="Add item"/>
                </td>
                <td class="swap">
            </tr>
        </tbody>
    </table>
</td>

我试图找到标题为&#34的img元素;添加项目&#34;相对于a元素,其值为&#34; Foo bar&#34;。我知道我正在寻找的元素将成为td的孩子,紧跟在td之后,是相对元素的父级。这是我到目前为止所用的(用Java)...

WebElement fooBar = driver.findElement(By.linkText("Foo bar"));
fooBar.findElement(By.xpath("..//..//..//..//../td//img[@title='Add item']")).click();

我在这里做错了什么想法?我尝试过使用斜线但是无法正常工作。

2 个答案:

答案 0 :(得分:2)

如果稍微改变策略并使用following-sibling

,该怎么办?
//td[@class="action" and .//td[@class="caption"]/a[. = "Foo Bar"]]/following-sibling::td[contains(@class, "rule")]//td[@class="plus"]/img[@title="Add item"]

在硒中:

WebElement addItem = driver.findElement(By.xpath("//td[@class='action' and .//td[@class='caption']/a[. = 'Foo Bar']]/following-sibling::td[contains(@class, 'rule')]//td[@class='plus']/img[@title='Add item']"));
addItem.click();

我们正在获取a元素,其中Foo Bar文字正在检查父级的课程。然后,对于第一个td父级,获得以下td兄弟rule级。然后,获取所需的img元素。

如果您想从找到的a元素开始,请使用ancestor查找tdclass="action",然后应用以下兄弟检查:

ancestor::td[@class="action"]/following-sibling::td[contains(@class, "rule")]//td[@class="plus"]/img[@title="Add item"]

在硒中:

WebElement fooBar = driver.findElement(By.linkText("Foo bar"));
fooBar.findElement(By.xpath("ancestor::td[@class='action']/following-sibling::td[contains(@class, 'rule')]//td[@class='plus']/img[@title='Add item']")).click();

答案 1 :(得分:1)

查看您正在使用的所有xpath,我发现您缺少初始//,因此请替换您正在使用的xpath

//..//..//..//..//../td//img[@title='Add item']