【问题标题】:Robot Framework - Selenium2Library - Input text into field according to the text before itRobot Framework - Selenium2Library - 根据之前的文本将文本输入到字段中
【发布时间】:2017-04-02 13:46:17
【问题描述】:

由于每次刷新后都会随机生成每个 ID,我不得不使用其他标识符。我基本上希望机器人在我指定的标识符旁边的字段中输入文本。

https://vgy.me/3YBIgl.png

我希望将文本输入到用户:字段并使用“用户:”作为定位器。 它适用于 xpaths,但我宁愿使用另一种不会那么脆弱的方法。

这是用于生成表单的 HTML

<tbody id="m8DPe" class="z-rows">
<tr id="m8DPf" style="background:#FFFFFF;" class="z-row">
    <td id="m8DPg-chdextr" style="background:#FFFFFF;text-align:left;" class="z-row-inner">
        <div id="m8DPg-cell" class="z-row-content">
            <span id="m8DPg" class="z-label">User:</span>
        </div>
    </td>
    <td id="m8DPh-chdextr" style="background:#FFFFFF;text-align:left;" class="z-row-inner">
        <div id="m8DPh-cell" class="z-row-content">
            <input id="m8DPh" class="z-textbox" value="" type="text" name="j_username">
        </div>
    </td>
</tr>
<tr id="m8DPi" style="background:#FFFFFF;" class="z-row z-grid-odd">
    <td id="m8DPj-chdextr" style="background:#FFFFFF;text-align:left;" class="z-row-inner">
        <div id="m8DPj-cell" class="z-row-content">
        <span id="m8DPj" class="z-label">Password:</span>
        </div>
    </td>
    <td id="m8DPk-chdextr" style="background:#FFFFFF;text-align:left;" class="z-row-inner">
        <div id="m8DPk-cell" class="z-row-content">
            <input id="m8DPk" class="z-textbox" value="" type="password" name="j_password">
        </div>
    </td>
</tr>

我知道会是这样的:

Input Text    //tr[contains(text(), 'Example') and ...]    ${USERNAME}

但老实说,我不知道。有什么地方可以读到吗?

我对 Robot Framework 非常陌生。对不起,菜鸟。

【问题讨论】:

  • 您是否有能力与开发人员一起稍微更改 HTML 标记?
  • 不,我不知道——我们基本上是用 Java 创建它,然后使用 ZK API。他们不能直接接触 HTML
  • 我在一个项目中遇到了类似的问题。我能够使用 Python 根据它们的描述 xpaths 计算文本框 xpaths。因为您的 id 看起来很相似,所以您应该能够通过剥离描述符 id 的额外部分来做到这一点。这听起来很吓人,但我发现它可以使测试自动化可读且健壮。
  • Pekka,我没有 Python 的背景,而且对这一切都非常陌生。你能指出我学习这个的方法吗?我愿意只是不知道从哪里开始

标签: robotframework selenium2library


【解决方案1】:

查看示例,输入的名称属性看起来不是随机生成的。如果确实如此,您可以按名称使用最简单的 Selenium 定位器策略,例如:

Input Text    name=j_username    ${USERNAME}

如果不是这样,这可以通过 xpath 来完成:

//tr[//span[text()="User:"]/td//input

读取(为了清楚起见,从右到左,虽然它是评估 LTR):返回输入,它位于 td(单元格)内,它本身是 tr(表格行)的直接子代,具有与该文本的跨度(此处完全匹配)。

因此,定位器将找到包含“用户:”单元格的行,并将返回其中的输入。

【讨论】:

    猜你喜欢
    • 2020-12-31
    • 1970-01-01
    • 2017-07-02
    • 2021-12-07
    • 1970-01-01
    • 2016-09-09
    • 2019-02-21
    • 1970-01-01
    • 2019-03-13
    相关资源
    最近更新 更多