【问题标题】:RobotFramework : How to retrieve the row of an array corresponding to a cell valueRobotFramework:如何检索与单元格值对应的数组行
【发布时间】:2019-02-22 07:33:29
【问题描述】:

在我正在使用的 UI 中,对于一个对象,有一个铅笔或一个篮子图标;我想单击铅笔(这将触发一个编辑模式),并希望为特定对象执行此操作。

现在我使用这个命令行:

Click Element xpath = (//a[@ng-click="openCreateEditModal (holding)"])[2]

我想用与值“RF-Account”对应的行的值替换“2”。

这是一个 HTML 示例:

<tbody ng-if="!isEmpty" class="body-table ng-scope" style="height: 165px;">
        <!-- ngRepeat: tenant in tenants track by $index --><tr ng-repeat="tenant in tenants track by $index" class="ng-scope" style="">
            <td class="ng-binding">RF-Accou</td>
            <td>
                <span class="text-bold ng-binding text-muted" ng-class="{'text-green' : tenant.status == 'ACTIVE', 'text-muted' : tenant.status == 'INACTIVE'}">INACTIVE</span>
            </td>
            <td style="width:118px">
                <div class="pull-right">
                    <a name="editBtn" type="submit" class="btn-icon" ng-click="openCreateEditModal(tenant)">
                        <span class="icon-i-edit fs" data-toggle="tooltip" title=""></span>
                    </a>
                    <a name="deleteBtn" type="submit" class="btn-icon" ng-click="deleteTenant(tenant)">
                        <span class="icon-i-trash fs" data-toggle="tooltip" title=""></span>
                    </a>
                </div>
            </td>
        </tr><!-- end ngRepeat: tenant in tenants track by $index --><tr ng-repeat="tenant in tenants track by $index" class="ng-scope">
            **<td class="ng-binding">RF-Account</td>**
            <td>
                <span class="text-bold ng-binding text-muted" ng-class="{'text-green' : tenant.status == 'ACTIVE', 'text-muted' : tenant.status == 'INACTIVE'}">INACTIVE</span>
            </td>
            <td style="width:118px">
                <div class="pull-right">
                    <a name="editBtn" type="submit" class="btn-icon" ng-click="openCreateEditModal(tenant)">
                        <span class="icon-i-edit fs" data-toggle="tooltip" title=""></span>
                    </a>
                    <a name="deleteBtn" type="submit" class="btn-icon" ng-click="deleteTenant(tenant)">
                        <span class="icon-i-trash fs" data-toggle="tooltip" title=""></span>
                    </a>
                </div>
            </td>
        </tr><!-- end ngRepeat: tenant in tenants track by $index --><tr ng-repeat="tenant in tenants track by $index" class="ng-scope">
            <td class="ng-binding">RF-Accountfirst</td>
            <td>
                <span class="text-bold ng-binding text-muted" ng-class="{'text-green' : tenant.status == 'ACTIVE', 'text-muted' : tenant.status == 'INACTIVE'}">INACTIVE</span>
            </td>
            <td style="width:118px">
                <div class="pull-right">
                    <a name="editBtn" type="submit" class="btn-icon" ng-click="openCreateEditModal(tenant)">
                        <span class="icon-i-edit fs" data-toggle="tooltip" title=""></span>
                    </a>
                    <a name="deleteBtn" type="submit" class="btn-icon" ng-click="deleteTenant(tenant)">
                        <span class="icon-i-trash fs" data-toggle="tooltip" title=""></span>
                    </a>
                </div>
            </td>
        </tr><!-- end ngRepeat: tenant in tenants track by $index -->
    </tbody>

我正在尝试查找与文本值“RF-Account”相对应的行。 供您参考,“RF-Account”行可以更改。

您能帮我找到用于 Robot Framework 的正确关键字吗?

【问题讨论】:

  • 你想达到什么目的?
  • 在同一行上,我想点击铅笔或篮子。现在我使用这个命令行: Click Element xpath = (// a [@ng-click = "openCreateEditModal (holding)"]) [2]。我想用与值“RF-Account”对应的行的值替换“2”

标签: selenium xpath robotframework


【解决方案1】:

重新表述您的问题 - 您需要一个可以帮助您解决问题的定位器,而不是机器人框架关键字(该关键字是已知的,Click Element)。

如果你的锚是文本,那么这个 xpath 会为你做:

//td[text()="RF-Account"]/following-sibling::td//a[@ng-click="openCreateEditModal(tenant)"]

让我解释一下:第一部分 (//td[text()="RF-Account"]) 将选择一个 td 元素,其文本为“RF-Account”。然后它会寻找一个后续td(“following-sibling”轴),它有一个a 子节点,其值为 ng-click - 并返回它(a)。

顺便说一句,在示例源中没有“openCreateEditModal(holding)”,因此我已将其更改为存在的“租户”。

【讨论】:

  • 您可以将此定位器简化为//td[.="RF-Account"]/following-a[@ng-click="openCreateEditModal(tenant)"]
  • @JeffC as given following-a 将被视为节点名称(显然不会匹配任何内容)。如果您的意图是写following::a - 那么这将改变定位器的目的 - 它会在匹配的td 之后捕获具有该属性的所有a 节点 - OP 的目标是捕获一个。我在这里遗漏了什么?
  • 是的......你是对的,这是一个错字,应该是::。当你使用.findElement() 时,它只返回第一个找到的元素,其余的被忽略。
  • 非常感谢你们的帮助。它完美地工作。我学到了 RF 的一个新元素,它肯定会让你发笑,但我打算浏览表格以查找包含“RF-Account”的行号。
【解决方案2】:

为了获得计数,您可以使用

获取匹配的 XPath 计数 //td[.="RF-Account"]

【讨论】:

    猜你喜欢
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 2011-07-09
    相关资源
    最近更新 更多