表中相对元素的XPath

时间:2018-05-03 07:03:21

标签: java selenium selenium-webdriver xpath webdriver

我使用Java Selenium根据标题作为输入打开链接。 我有以下部分HTML,其中Top 5 Item Exception Types是我需要找到的标题,其超链接<a class="CatalogActionLink" href="javascript:void(null)">Open</a>位于其同级<tr><td><span>标记旁边的另一个<tr><td><span>标记中。如何通过搜索标题Open找到元素Top 5 Item Exception Types超链接?

<table cellspacing="4" cellpadding="0" border="0">
    <tbody>
        <tr>
            <td class="CatalogObjectListItemIcon" rowspan="2"><img src="/analytics/res/sk_blafp/catalog/obj_request_b.png" alt="Analysis" title="Analysis"></td>
            <td><span class="CatalogObjectListItemTitle">Top 5 Item Exception Types</span>
                <span class="CatalogObjectListItemLastModifiedTime">Last Modified 2/15/2018 12:39:45 PM</span>
                <span class="CatalogObjectListItemOwner">Owner System Account</span>
            </td>
        </tr>
        <tr>
            <td>
                <table cellspacing="0" cellpadding="0">
                    <tbody>
                        <tr>
                            <td><a class="CatalogActionLink" href="javascript:void(null)">Open</a></td>
                            <td><span class="CatalogActionLinkSeparator">&nbsp;</span>
                            </td>
                            <td><a class="CatalogActionLink" href="javascript:void(null)">Edit</a></td>
                            <td><span class="CatalogActionLinkSeparator">&nbsp;</span>
                            </td>
                            <td><a class="CatalogActionLink" href="javascript:void(null)" title="Click to see more actions of Top 5 Item Exception Types">More<img border="0" src="/analytics/res/s_FusionFX/uicomponents/obips.UberBar/dropdown_n.png" alt="Dropdown menu">
                            </a></td>
                        </tr>
                    </tbody>
                </table>
            </td>
        </tr>
    </tbody>
</table>

我可以使用以下

找到标题
WebElement reportElement = driver.findElement(
                    By.xpath("//span[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),'"
                            + reportName.toLowerCase() + "')]"));

5 个答案:

答案 0 :(得分:2)

试试这个xpath - "//span[.='Top 5 Item Exception Types']//ancestor::tr/following-sibling::tr//a[.='Open']"

答案 1 :(得分:2)

试试这个:

//span[text()='Top 5 Item Exception Types']/ancestor::tr/following-sibling::tr/descendant::a[text()='Open']

答案 2 :(得分:2)

@ Grasshopper和@cruisepandey的答案都很好(+1)。这只是一个相对较短的版本:

//tr[.//span='Top 5 Item Exception Types']/following-sibling::tr//a[.='Open']

答案 3 :(得分:1)

使用文字识别 WebElement ,例如关于 WebElement 打开修改更多,文字为前5项违例类型您可以编写一个接受参考文本的函数,即前5个项目例外类型和所需的操作(即打开编辑更多)作为输入参数,并按如下方式找到相关的 WebElement

public void clickOperation(String title, String operation)
{
    WebElement opsLink = driver.findElement(By.xpath("//td/span[.='" + title + "']//following::tr[1]/td/table/tbody/tr//td/a[@class='CatalogActionLink'][.='" + operation + "']"));
}

你可以调用函数clickOperation()和参考文本,即前5项例外类型和所需的操作作为String参数从脚本中的任何位置识别相应前5个项目例外类型 项目的相关链接WebElement ,如下所示:

clickOperation("Top 5 Item Exception Types","Open")
// or
clickOperation("Top 5 Item Exception Types","Edit")
// or
clickOperation("Top 5 Item Exception Types","More")

答案 4 :(得分:0)

您可以尝试使用此xpath,它会找到您的文本然后返回几个级别,然后再次搜索特定的“a”元素。

//td/span[contains(text(),'Top 5 Item Exception Types')]/../../..//td/a[text()='Open']