【问题标题】:XPath to click 2nd link on page with this classXPath 单击此类页面上的第二个链接
【发布时间】:2015-05-20 12:10:33
【问题描述】:

在验收测试中,我尝试单击给定地址的.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>

如何点击删除按钮?

【问题讨论】:

    标签: xpath codeception


    【解决方案1】:

    您遇到了与// 运算符定义方式相关的常见错误。 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 链接。这什么也找不到,因为在任何给定的div 中都只有一个这样的a。如果加括号:

    (//a[contains(@class,"fa-trash-o")])[2]
    

    然后它将选择整个文档中的第二个 fa-trash-o - [2] 现在适用于 (...) 表达式的整个结果,而不仅仅是最后一步。

    【讨论】:

      猜你喜欢
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      相关资源
      最近更新 更多