根据 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)');
我正在使用 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)');