Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Selenium2库查找电子邮件字段的值_Selenium_Selenium Webdriver_Robotframework - Fatal编程技术网

如何使用Selenium2库查找电子邮件字段的值

如何使用Selenium2库查找电子邮件字段的值,selenium,selenium-webdriver,robotframework,Selenium,Selenium Webdriver,Robotframework,我正在使用robot框架和Selenium2库为web应用程序编写回归测试。我有一个简单的测试,它会更改“帐户设置”类型表单的所有字段(想想用户名、密码、电子邮件等),然后重新访问页面并确保所有数据都已保存。像这样: *** Test Cases *** Sample Test Change All Account Details New Account Details Should Be Saved *** Keywords *** Change All Account De

我正在使用robot框架和Selenium2库为web应用程序编写回归测试。我有一个简单的测试,它会更改“帐户设置”类型表单的所有字段(想想用户名、密码、电子邮件等),然后重新访问页面并确保所有数据都已保存。像这样:

*** Test Cases ***
Sample Test
    Change All Account Details
    New Account Details Should Be Saved

*** Keywords ***
Change All Account Details
    Navigate to Account Page
    Input Text    accountSettingFrom_firstname    Test
    Input Text    accountSettingFrom_lastname    Dummy
    Input Text    accountSettingFrom_email    new_email@example.com
    # etc etc, eventually save the form

New Account Details Should Be Saved
    Go To    ${ACCOUNT_URL}
    Textfield Value Should Be    accountSettingFrom_firstname    Test
    Textfield Value Should Be    accountSettingFrom_lastname    Dummy
    Textfield Value Should Be    accountSettingFrom_email    new_email@example.com
我在最后一步中遇到以下错误(
Textfield值应该是accountsetingfrom_email new_email@example.com
)运行此测试时:
文本字段“accountSettingFrom_email”的值应为“new”_email@example.com'但是“没有”

我在该步骤运行前一刻拍摄了屏幕截图,并添加了暂停,并手动确认“accountSettingFrom_email”的
属性确实是“新的”_email@example.com'. 检查时元素的HTML:

<input type="email" name="accountSettingFrom[email]" value="new_email@example.com" class="foo bar" required="required" tabindex="3" maxlength="128" url="/foo/bar" userid="foobar" id="accountSettingFrom_email">

您会注意到前两个
Textfield值应该是
keywords pass。这三个元素之间唯一的区别是“accountSettingFrom_email”是
type=“email”
,而不是
type=“text”
,但是如果关键字成功地定位了元素,那么为什么它不能获取
value
属性的值呢

我做错什么了吗?我觉得必须存在这个或类似的关键字才能测试它,而不必编写自定义库。

我会尝试获取名为
value
的属性。根据API,它应该是


帐户设置自_email@value

您在Selenium2库中遇到了一些错误。当Selenium2库创建时,HTML5没有得到批准。在内部,库正在过滤掉您的元素,因为它的类型不是“text”(在HTML5之前是有意义的)
Textfield值应为
,只有在元素具有标记名输入和类型属性值“text”时,才能找到该元素。 看

另外,由于
Textfield值应该是如何实现的
,您得到的错误使您认为该元素是找到的,而事实上它不是找到的,因为它被过滤掉了。 看


相反,
Input Text
Input Password
从未对元素标记或属性进行过过滤。

代码到底是什么样的?你得到email字段的值了吗?我写的所有代码都在这里精确地表示出来(不包括库导入之类的,它们显然是有效的,否则整个事情就不起作用了)。Selenium2Library的python绑定“Textfield Value Should Be”是Selenium2Library的一部分,我无法控制它,因为它是第三方库。理论上,关键字应该返回email字段的值,但不是。这或多或少就是一个问题:为什么不呢?Selelnium2库的文档似乎表明这应该是可行的。可能存在同名的隐藏输入。查看HTML或查看是否通过:Xpath应匹配X次//输入[@name='accountSettingFrom_-email'或@id='accountSettingFrom_-email']1。我见过多个元素具有相同id(无效HTML)的页面。这是一个很好的建议,特别是考虑到从事这个项目的开发人员很容易重复id,我们一直在逐段查找它们。不幸的是(奇怪的是我这么说),这个页面上没有重复的ID。然而,我多么希望这就是问题所在。有一个更直接的关键词“获取价值”,但对我来说,这感觉像是一个解决办法。我想找一个有Selenium2Library经验的人来解释为什么“Textfield Value应该是”——它应该读取输入元素的值——在这种情况下读取的值不正确。使用Get Value并将其与期望值进行比较,再加上几个关键字,感觉太像是一种黑客行为。我宁愿编写自己的库文件,将“复杂”的逻辑排除在关键字区域之外。您当然可以这样做。但是,到目前为止,我知道核心Selenium库的正确值和属性值是不同的。我有点怀疑你需要阅读属性而不是属性。看见顺便提一下,我不认为这个API是解决办法。如果你的怀疑是真的,那么为什么前面的两行(比如
Textfield Value应该是accountSettingFrom_firstname Test
)通过了呢?在这种情况下,关键字成功地获取并测试了元素的值,这正是关键字要做的。我不明白为什么它会在一个元素上工作,而不是在另一个元素上,在看起来完全相同的情况下。我不知道。一般来说,这些字段看起来是相同的,但
type=email
是一种特殊类型,其中有一些内置机制来操作值并在提交前检查验证。对于后代,我目前使用Get value关键字,并将其与预期值与Should Be Equal关键字进行比较。Saifur的建议也是完全有效的,Get Value关键字稍微简洁一些。我接受这个答案,因为它确实回答了如何做的问题。我将不得不问另一个更具体的问题,为什么最直接的关键字(Textfield值应该是)不起作用。我在想象这样的事情会发生,但我不确定。非常感谢您的澄清,我一定会关注这些bug报告。