根据 URL,<a> 标签的第 n 个元素

nth element of <a> tag according to the URL

我正在使用 selenium firefox 插件和 运行 尝试 select 多个标签的第 n 个元素具有相同的 href 属性值,但只是在最后更改。

看了截图后的说法:

//a[contains(@href, '/setup/goal_add_edit/Orm_Institution/1/')]

必须是我试过的第二个元素:

//a[contains(@href, '/setup/goal_add_edit/Orm_Institution/1/')][2]

日志中出现错误:

[error] 元素 //a[contains(@href, '/setup/goal_add_edit/Orm_Institution/1/')][2] 未找到

这是 HTML 示例:

<table class="table table-bordered ">
<thead>
  <tr>
     <td class="col-md-10">Goal</td>
     <td class="col-md-2 text-center">Actions</td>
  </tr>
</thead>
<tbody>
  <tr>
     <td>
        FF_selenium_test                    
     </td>
     <td class="text-center">
        <a href="/setup/goal_add_edit/Orm_Institution/1/3" data-toggle="ajaxModal" class="btn btn-block " title="Edit">
        <span class="btn-label-icon left fa fa-pencil-square-o" aria-hidden="true"></span>
        Edit                            </a>
        <a href="/setup/goal_delete/Orm_Institution/1/3" data-toggle="deleteAction" message="Are you sure ?" class="btn btn-block " title="Delete">
        <span class="btn-label-icon left fa fa-trash-o" aria-hidden="true"></span>
        Delete                            </a>
     </td>
  </tr>
  <tr>
     <td>
        FF_selenium for editing                    
     </td>
     <td class="text-center">
        <a href="/setup/goal_add_edit/Orm_Institution/1/4" data-toggle="ajaxModal" class="btn btn-block " title="Edit">
        <span class="btn-label-icon left fa fa-pencil-square-o" aria-hidden="true"></span>
        Edit                            </a>
        <a href="/setup/goal_delete/Orm_Institution/1/4" data-toggle="deleteAction" message="Are you sure ?" class="btn btn-block " title="Delete">
        <span class="btn-label-icon left fa fa-trash-o" aria-hidden="true"></span>
        Delete                            </a>
     </td>
  </tr>
</tbody>
</table>

我不知道您的具体环境,但我认为您的代码应该可以工作...尝试在 [2]

之前在 XPath 周围放置括号

一些可能的问题:

  • 区分大小写
  • 命名空间(在你的情况下不要这么认为)
  • 您测试的现有 HTML 没有第二个 <a> 具有此 href
  • 由于前面的步骤,当前节点不是根节点。如果您当前的节点在某处完成路径,则使用 //a 搜索将不会找到更高的出现次数...

像这样尝试:

(//a[@href='/setup/goal_add_edit/Orm_Institution/1/'])[2]

这应该找到所有 <a> 元素,其中 href 属性具有给定值。然后它需要第二次出现...

已使用 SQL-服务器进行测试,但在您的环境中应该类似:

DECLARE @ITEM XML=
N'<html>
  <body>
  <a href="YourURL">Test1</a>
  <SomeOther><inner><a href="YourURL">Testinner</a></inner></SomeOther>
  <a href="YourURL">Test2</a>
  <a href="YourURL">Test3</a>
  </body>   
  </html>';

--适用于所有人

SELECT @ITEM.value('(//*[local-name()="a" and @href="YourURL"]/text())[2]','nvarchar(max)');

--更好,只找<a>

SELECT @ITEM.value('(//a[@href="YourURL"]/text())[2]','nvarchar(max)');

--returns NULL,下面没有<a><SomeOther>
--但是使用 [1] 它会 return 和上面一样...

SELECT @ITEM.query('/html/body/SomeOther').value('(//a[@href="YourURL"])[2]','nvarchar(max)');

更新:使用您给定的样本

用您提供的样本再次尝试。在这里工作(SQL 服务器),应该也适合你...

DECLARE @ITEM XML=
N'<table class="table table-bordered ">
<thead>
  <tr>
     <td class="col-md-10">Goal</td>
     <td class="col-md-2 text-center">Actions</td>
  </tr>
</thead>
<tbody>
  <tr>
     <td>
        FF_selenium_test                    
     </td>
     <td class="text-center">
        <a href="/setup/goal_add_edit/Orm_Institution/1/3" data-toggle="ajaxModal" class="btn btn-block " title="Edit">
        <span class="btn-label-icon left fa fa-pencil-square-o" aria-hidden="true"></span>
        Edit                            </a>
        <a href="/setup/goal_delete/Orm_Institution/1/3" data-toggle="deleteAction" message="Are you sure ?" class="btn btn-block " title="Delete">
        <span class="btn-label-icon left fa fa-trash-o" aria-hidden="true"></span>
        Delete                            </a>
     </td>
  </tr>
  <tr>
     <td>
        FF_selenium for editing                    
     </td>
     <td class="text-center">
        <a href="/setup/goal_add_edit/Orm_Institution/1/4" data-toggle="ajaxModal" class="btn btn-block " title="Edit">
        <span class="btn-label-icon left fa fa-pencil-square-o" aria-hidden="true"></span>
        Edit                            </a>
        <a href="/setup/goal_delete/Orm_Institution/1/4" data-toggle="deleteAction" message="Are you sure ?" class="btn btn-block " title="Delete">
        <span class="btn-label-icon left fa fa-trash-o" aria-hidden="true"></span>
        Delete                            </a>
     </td>
  </tr>
</tbody>
</table>';

--两次尝试return"Edit"

SELECT @ITEM.value('(//*[local-name()="a" and contains(@href, "/setup/goal_add_edit/Orm_Institution/1/")]/text())[2]','nvarchar(max)');

SELECT @ITEM.value('(//a[contains(@href, "/setup/goal_add_edit/Orm_Institution/1/")]/text())[2]','nvarchar(max)');