单击此 class 页面上的第二个 link 的 XPath
XPath to click 2nd link on page with this class
在验收测试中,我尝试单击给定地址的 .fa-trash-o
图标。为了简化事情,我一直在尝试 select 页面上具有给定 class 名称的第二个元素。
我尝试了以下几种变体,但都没有成功。
$I->click(\Codeception\Util\Locator::find('a', ['class' => 'fa fa-trash-o']).'[2]');
$I->click('//a[contains(@class,"fa-trash-o")][2]');
这是我的模板:
<div class="grid simple address-card">
<div class="grid-title no-border">
<h4>{{ $address->name }}</h4>
<div class="tools">
{!! Form::open(['url' => '/account/address/'.$address->id, 'method' => 'delete']) !!}
<a href="/account/address/{{ $address->id }}/edit" class="fa fa-edit"></a>
<a onclick="$(this).closest('form').submit();" class="fa fa-trash-o"></a>
{!! Form::close() !!}
</div>
</div>
<div class="grid-body no-border">
@include('partials.address')
</div>
</div>
我怎样才能点击那个删除按钮?
您遇到了与 //
运算符定义方式相关的常见错误。 XPath 表达式
//a[contains(@class,"fa-trash-o")][2]
其实就是
/descendant-or-self::node()/child::a[contains(@class,"fa-trash-o")][2]
[2]
适用于 child::
步骤而不是后代搜索,因此它将 select 每个 a
元素,即第二个 fa-trash-o
link 在其各自的父项下。这什么也找不到,因为在任何给定的 div
中只有一个这样的 a
。如果加上括号:
(//a[contains(@class,"fa-trash-o")])[2]
然后它将 select 整个文档中的第二个 fa-trash-o
- [2]
现在适用于 (...)
表达式的整个结果,而不仅仅是最终的结果步骤。
在验收测试中,我尝试单击给定地址的 .fa-trash-o
图标。为了简化事情,我一直在尝试 select 页面上具有给定 class 名称的第二个元素。
我尝试了以下几种变体,但都没有成功。
$I->click(\Codeception\Util\Locator::find('a', ['class' => 'fa fa-trash-o']).'[2]');
$I->click('//a[contains(@class,"fa-trash-o")][2]');
这是我的模板:
<div class="grid simple address-card">
<div class="grid-title no-border">
<h4>{{ $address->name }}</h4>
<div class="tools">
{!! Form::open(['url' => '/account/address/'.$address->id, 'method' => 'delete']) !!}
<a href="/account/address/{{ $address->id }}/edit" class="fa fa-edit"></a>
<a onclick="$(this).closest('form').submit();" class="fa fa-trash-o"></a>
{!! Form::close() !!}
</div>
</div>
<div class="grid-body no-border">
@include('partials.address')
</div>
</div>
我怎样才能点击那个删除按钮?
您遇到了与 //
运算符定义方式相关的常见错误。 XPath 表达式
//a[contains(@class,"fa-trash-o")][2]
其实就是
/descendant-or-self::node()/child::a[contains(@class,"fa-trash-o")][2]
[2]
适用于 child::
步骤而不是后代搜索,因此它将 select 每个 a
元素,即第二个 fa-trash-o
link 在其各自的父项下。这什么也找不到,因为在任何给定的 div
中只有一个这样的 a
。如果加上括号:
(//a[contains(@class,"fa-trash-o")])[2]
然后它将 select 整个文档中的第二个 fa-trash-o
- [2]
现在适用于 (...)
表达式的整个结果,而不仅仅是最终的结果步骤。