【问题标题】:robot framework - Clear Element Text keyword is not working机器人框架 - 清除元素文本关键字不起作用
【发布时间】:2019-04-30 07:17:41
【问题描述】:

我们有一个文本字段,其 html 结构如下。

<input class="css-1npmunl" name="some.name" aria-label="New Employee ID" data-qa="some.data" placeholder="" value="TEST1" type="Text">

内置的 Selenium2Library 关键字 Clear Element Text ${Field_Locator} 不会按预期清除文本字段。实际上,该字段会被清除一会儿,然后当我执行其他操作时,例如单击Save 按钮,该字段值会再次使用相同的值重新填充(TEST1)(value 属性包含字段的实际值)。

但是当我们手动执行相同的操作时,它会按预期工作。当我使用开发人员工具检查 DOM 时,似乎 Clear Element Text 关键字实际上并没有使 value 属性的值为空。但是在手动操作时,value 属性的值会被清空。

【问题讨论】:

  • 解决方法是将 EMPTY 传递给字段,如下所示Input Text &lt;locator&gt; ${EMPTY}
  • 第一个选项使用document.getElementsByName('some.name')[0].value = ' '; 第二个选项使用document.getElementById("some.name").removeAttribute("value");
  • 感谢您的解决方案。不幸的是,上面提供的两种解决方案都不适用于我的情况。

标签: selenium robotframework


【解决方案1】:

我曾多次遇到同样的问题(React 总是处于最底层!:) 并尝试了不同的方法。按照 cmets 中的建议设置一个空值有时会起作用,但会随机失败。

最后,我选择了一个“直接”的解决方案——发送与当前值长度一样多的退格字符。副作用是这也接近于正常的用户交互:);真正的副作用是这比Clear Element Text 调用要慢,可能需要几秒钟才能获得更长的文本。

以下是如何在 RF 中执行此操作的示例:

${value}=     Get Element Attribute   ${Field_Locator}      value
${backspaces count}=    Get Length      ${value}
Run Keyword If    """${value}""" != ''    # if there's no current value - no need to slow down by an extra SE call
...     Repeat Keyword  ${backspaces count +1}  Press Key  ${Field_Locator}   \\08    # this is the code for the backspace key; "backspaces count +1" - just too be sure :)

【讨论】:

  • 是的,这行得通。谢谢你。有多个双引号“”“${value}”“”有什么理由吗?只是想知道。
  • 是的,这是对任何本身带有引号的值的预防措施 - 在 python 中,用三引号括起来的字符串值可以带有引号(和换行符)字符,而不会产生语法错误(在一个REPL)。因为我并不总是知道要清除的值是多少,所以这有点像是一种防御。
  • 超级答案!! @Todor,你成功了!!
  • 效果很好!也许只是修复折旧警告:[ WARN ] 关键字“SeleniumLibrary.Press Key”已弃用。请改用Press Keys
【解决方案2】:

由于发帖人回复说他/她让他们的代码正常工作,但这个答案对我没有帮助;这是我的答案。

我遇到了完全相同的问题;使用Clear Element Text 确实清除了屏幕上的文本字段,但提交表单后,验证仍然失败。

Input text ${EMPTY} 对我也不起作用。

我使用它的方法是在其中添加一些新文本,然后使用
Press Keys [locator] A+BACKSPACE 立即再次删除它。我阅读了许多找到字符串长度的答案,并且多次退格。但我只是简单地按键盘上的“a”,然后使用退格键再次删除该“a”。

【讨论】:

    【解决方案3】:

    似乎某些框架在清除某些文本字段时会遇到问题。在这些情况下,我会创建一个类似这样的关键字:

    Clear Text Field
    
      [Arguments]  ${inputField}
      press keys  ${inputField}  CTRL+a+BACKSPACE
    

    【讨论】:

      【解决方案4】:

      除了使用“清除元素文本”关键字之外,还有很多方法可以做到这一点。我建议使用“Press Keys”关键字来选择文本字段中的所有文本。然后,按“BACKSPACE”键将其删除。

      RF 脚本示例如下:

      Press Keys          [locator]               CTRL+a
      Press Keys          [locator]               BACKSPACE
      Input Text          [locator]               ${new_text}
      Click Button        ${save_button}
      

      【讨论】:

        【解决方案5】:

        另一种解决方法:

        按键 ${web_text_email_id} \\1

        按键 ${web_text_email_id} \\127

        输入文本 ${web_text_email_id} ${user_name}

        【讨论】:

          【解决方案6】:

          你可以这样试试

          按键 ${element} CTRL+A+DELETE

          对我有用,希望对你也有帮助

          【讨论】:

            猜你喜欢
            • 2016-11-15
            • 2013-11-08
            • 1970-01-01
            • 1970-01-01
            • 2018-09-20
            • 2015-10-14
            • 2019-06-11
            • 2017-12-19
            • 2021-04-30
            相关资源
            最近更新 更多