【问题标题】:XPath for relative element in table表中相对元素的 XPath
【发布时间】:2018-05-03 07:03:20
【问题描述】:

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

<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() + "')]"));

【问题讨论】:

  • open 和 Top 5 Item Exception Types 有什么关系?我没有得到这部分!
  • 'Open' 是标题为“Top 5 Item Exception Types”的报告的超链接
  • 你想点击超链接吗?
  • 请把问题说清楚。让试图帮助你的人放松一下。
  • @cruisepandey 是的,我想通过搜索“前 5 个项目异常类型”来打开“打开”的超链接

标签: java selenium selenium-webdriver xpath webdriver


【解决方案1】:

试试这个:

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

【讨论】:

  • 关注错误org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//span[text()='top 5 item exception types']/ancestor::tr/following-sibling::tr/descendant::a[text()='Open']"}
  • 用顶部代替顶部
  • 请复制我给出的完全相同的 xpath,它在我的机器上运行良好。只要确保表格不应该在任何框架中。
【解决方案2】:

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

【讨论】:

  • 出现以下错误org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//span[text()='top 5 item exception types']//ancestor::tr/following-sibling::tr//a[.='Open']"} 我们是否也需要考虑&lt;td&gt;?
  • Top 中有一个小写字母 't',把它改成 'T'。我复制了你的 html 并试用了它,它适用于我提供的 xpath。
【解决方案3】:

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

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

【讨论】:

  • 我认为这是一个更好的答案...更大程度地减少了对html结构的依赖。
【解决方案4】:

用文本识别 WebElement,例如打开、编辑或更多,相对于WebElement,文本为Top 5 Item Exception Types 您可以编写一个函数来接受参考文本,即 Top 5 Item Exception Types 和所需的 action(即 Open , Edit 或 More) 作为输入参数并定位相关的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() 以及参考文本,即Top 5 Item Exception Types 和所需的操作 作为String 的参数,来自您的任何地方用于识别相应Top 5 Item Exception Types item 的相关Link WebElement 的脚本如下:

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

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-03-25
      • 2017-01-20
      • 1970-01-01
      • 2018-03-27
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多