在验收测试中,我尝试点击指定地址的.fa-trash-o
图标。为简化起见,我一直在尝试使用给定的类名选择页面上的第二个元素。
我已经尝试了以下几种变体而没有运气。
$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>
如何点击该删除按钮?
答案 0 :(得分:2)
您正在绊倒与定义//
运算符的方式相关的常见错误。 XPath表达式
//a[contains(@class,"fa-trash-o")][2]
实际上意味着
/descendant-or-self::node()/child::a[contains(@class,"fa-trash-o")][2]
[2]
适用于child::
步骤而不是后代搜索,因此它会选择每个a
元素,该元素是其各自父级下的第二个fa-trash-o
链接。这找不到任何内容,因为在任何给定的a
中只有一个div
。如果你添加括号:
(//a[contains(@class,"fa-trash-o")])[2]
然后它将在整个文档中选择第二个fa-trash-o
- [2]
现在适用于(...)
表达式的整个结果,而不仅仅是最后一步。