3

我一直在尝试使用BrowserTest Slim 夹具从Fitnesse测试中的以下 html 中获取第一条错误消息。

<div class="validation-errors">
  <ul>
    <li>Enter your code.</li>
    <li>Enter your username.</li>
    <li>Enter your password.</li>
  </ul>
</div>

我尝试了以下 Xpath:

//div[@class='validation-errors']/ul/li[1]/text()
//div[@class='validation-errors']/ul/li[1]
//div[@class='validation-errors']/ul/li

第一个 xpath 返回[null]where 第二个和第三个返回[0]

预期的结果是Enter your code.

如果我把 li 完全拿出来

//div[@class='validation-errors']/ul

然后它返回

[Enter your code.
Enter your username.
Enter your password.]

因此,无论哪种方式,我的测试都失败了,它只查找第一条错误消息。我已经在在线 Xpath 测试仪上尝试了 xpath 查询,它似乎可以按预期工作。

这是一个示例健身测试用例:

|table template|try to login                                      |
|open          |https://my.url.com/login?                             |
|enter         |@{code}    |as             |Code                      |
|enter         |@{username}|as             |Username                  |
|enter         |@{password}|as             |Password                  |
|click         |Login                                                 |
|$message=|value of                   |xpath=//div[@class='validation-errors']/ul/li[1]|



|storyboard|browser test|


|try to login                                                                        |
|code        |username           |password            |message?                          |
|            |                   |                    |Enter your code.                  |

可能是我遗漏了一些明显的东西,但是我试图弄清楚几个小时而没有任何成功,我想我会在这里发布这个,以防有些人有类似的经历,或者可以提供一个解决方案来获得<li>三个中第一个的价值。

4

2 回答 2

1

不幸的是,所有<li>元素在 HTML 中都有一个隐含的“值”属性,这就是 BrowserTestvalue of返回的内容,直到版本 2.5.1。因此,您的第二个和第三个 XPath 绝对正确地选择了您要查找的项目。不幸的是,返回的值不是您期望/想要的。如果您使用 2.5.1 版再次尝试它们,它们应该可以工作。


背景

value of最初设计用于返回输入元素的值(在它们的“值”属性中),并且具有回退行为,因此如果找到的元素具有“值”属性,text()则返回它。这在大多数情况下都很好用,但是<li>即使页面源中没有 value 属性,这也是一种痛苦。在 2.5.1 BrowserTest 之前没有一个方法可以让你获取<li>.

于 2015-12-23T21:36:41.620 回答
0

尝试其中一种 - 长的通过 id 和所有级别或短的直接通过:

xpath=//div[@class="validation-errors"]/ul/li[text()="Enter your code."]

xpath=//li[text()="Enter your code."]
于 2015-12-17T18:59:52.270 回答