Java 表中相对元素的XPath

Java 表中相对元素的XPath,java,selenium,selenium-webdriver,xpath,webdriver,Java,Selenium,Selenium Webdriver,Xpath,Webdriver,我使用JavaSelenium打开基于标题的链接作为输入。 我有以下HTML部分,其中前5项异常类型是我需要查找的标题,其超链接位于其同级标记旁边的另一个标记中。如何通过搜索标题前5项异常类型,找到元素打开的超链接 <table cellspacing="4" cellpadding="0" border="0"> <tbody> <tr> <td class="CatalogObjectListItemI

我使用JavaSelenium打开基于标题的链接作为输入。 我有以下HTML部分,其中
前5项异常类型
是我需要查找的标题,其超链接
位于其同级
标记旁边的另一个
标记中。如何通过搜索标题
前5项异常类型
,找到元素
打开的
超链接

<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>
尝试此xpath--
“//span[.='Top 5 Item Exception Types']//祖先::tr/以下兄弟姐妹::tr//a[.='Open']”“
尝试以下操作:

//span[text()='Top 5 Item Exception Types']/ancestor::tr/following-sibling::tr/descendant::a[text()='Open']
要识别带有文本的WebElement,例如打开编辑更多,对于带有前5项异常类型的WebElement,您可以编写一个函数,该函数将接受参考文本,即前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项异常类型和所需操作作为
字符串
参数,从脚本中的任何位置识别相应的前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")

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

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

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

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

“打开”和“前5项异常类型”之间的关系如何?我没有得到这部分内容。“打开”是标题为“前5项异常类型”的报告的超链接。您想单击超链接吗?请澄清问题。请让试图帮助您的人轻松一点。@cruisepandey是的,我想通过搜索打开“打开”的超链接前5项异常类型'获取以下错误
org.openqa.selenium.NoSuchElementException:没有这样的元素:无法找到元素:{“方法”:“xpath”,“选择器”:”//span[text()='前5项异常类型']//祖先::tr/后续同级::tr//a[.='Open']}我们是否需要考虑<代码> <代码>?你有一个小的“t”在顶部,我复制了你的HTML并尝试了它,它与XPath I GAVE一起工作。得到以下错误:Org> Or.OpenQa. SeliyUn.NouChelEngExpExc:没有这样的元素:无法定位元素:{“方法”:“XPath”、“选择器”:“//SPAN[文本())='top 5 item exception types']/祖先::tr/以下同级::tr/Degenant::a[text()='Open']“}
使用Top而不是Top请复制与我给出的xpath完全相同的xpath,它在我的机器中运行良好。只需确保表不应位于任何帧中。我认为这是一个更好的答案…在更大程度上减少了对html结构的依赖性。
//td/span[contains(text(),'Top 5 Item Exception Types')]/../../..//td/a[text()='Open']