为啥 Robot Framework、Selenium2Library、Element Text Should Be 关键字无法正确验证输入元素文本?

Posted

技术标签:

【中文标题】为啥 Robot Framework、Selenium2Library、Element Text Should Be 关键字无法正确验证输入元素文本?【英文标题】:Why Robot Framework, Selenium2Library, Element Text Should Be keyword does not verify input element text properly?为什么 Robot Framework、Selenium2Library、Element Text Should Be 关键字无法正确验证输入元素文本? 【发布时间】:2020-09-13 16:11:57 【问题描述】:

我在测试基于https://www.freecodecamp.org/learn/responsive-web-design/responsive-web-design-projects/build-a-survey-form 为自学目的创建的简单调查 html 页面时遇到问题。 当我尝试检查输入字段是否使用Element text should be关键字填充时,它不断抛出错误The text of element 'id=name' should have been 'Test Name' but it was '',但在测试期间完成的selenium屏幕截图显示文本输入正确。

为了调试一个问题,我注释了大部分代码并尝试只测试一个输入字段。

调查.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Survey Form</title>
</head>
<body>
<h1 id="title">Survey Form</h1>

<p id="description">Thank you for taking the time</p>

<div class="container">
    <form id="survey-form">
        <div>
            <label for="name" id="name-label">Name:</label>
            <input type="text" name="name" id="name" placeholder="Enter your name"/>
        </div>

    </form>
</div>
</body>
</html>

测试是使用 BDD 约定编写的。

survey_tests.robot

** Settings **
Library           Selenium2Library
Test Teardown     Close Browser

** Variables **
$SURVEY PAGE    an/absolute/path/to/survey.html
$BROWSER        Chrome

** Test Cases **
Check name input
  When Survey Page is opened
  Given User fill the name field with 'Test Name'
  Then Element name contains 'Test Name'


** Keywords **
Survey Page is opened
    Open Browser                       $SURVEY PAGE    $BROWSER

User fill the name field with '$name'
    Input Text                         id=name           $name

Element name contains '$name'
    Element Text Should Be             id=name           $name

我使用: Python 3.7.5 机器人框架-selenium2library 3.0.0 我在 79、81、83 版本中使用 Chrome 测试了代码。

【问题讨论】:

看起来像一个错误。我确认了 SeleniumLibrary 4.4.0 和 Chrome 83 和 Firefox 76 的问题。 【参考方案1】:

Get Element Text 返回节点内的文本数据,例如"&lt;element&gt;the text inside here&lt;/element&gt;",而您的目标是 input 元素,显然是输入的值。 该(值)不存储在节点的内容中,而是存储在一个名为“值”的属性中;然后你通过Get Element Attribute检索它:

$value=    Get Element Attribute    id=name    value

然后您可以使用Should Be Equal As Strings 或其他类似关键字来确定它是您需要的任何内容。

【讨论】:

以上是关于为啥 Robot Framework、Selenium2Library、Element Text Should Be 关键字无法正确验证输入元素文本?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Robot Framework、Selenium2Library、Element Text Should Be 关键字无法正确验证输入元素文本?

Robot Framework应用——Mac环境下Robot Framework的安装及简单实用

Robot Framework应用——Mac环境下Robot Framework的安装及简单实用

Robot Framework - 从带有参数的其他 *.robot 脚本调用 *.robot 脚本

Robot Framework重点

用Python写Robot Framework测试