使用BrowserTest的Fitnesse中的Xpath Slim fixture插件不适用于ul li

时间:2015-12-15 15:31:26

标签: xpath fitnesse fitnesse-slim

我一直试图从以下内容中获取第一条错误消息 使用Fitnesse Slim fixture进行BrowserTest测试中的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] ,其中第二个和第三个返回 [0]

预期结果为 Enter your code.

如果我完全接受李

//div[@class='validation-errors']/ul
然后它返回

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

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

以下是fitnesse测试用例示例:

|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.                  |

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

2 个答案:

答案 0 :(得分:1)

不幸的是,所有<li>个元素都会获得隐含的&#39;值&#39; HTML中的属性,这是BrowserTest value of返回的内容,直到版本2.5.1。所以你的第二个和第三个XPath绝对正确选择你要找的项目。遗憾的是,返回的值不是您期望/想要的值。 如果您在2.5.1版本中再次尝试它们,它们应该可以工作。

背景

value of最初设计用于返回输入元素的值(在其&#39;值&#39;属性中),并具有后备行为,以便在找到的元素中执行&#39;值&#39;返回属性text()。这在大多数情况下都非常好用,但是<li>很痛苦,即使页面的来源中没有值,它也会有一个值属性。 在2.5.1之前,BrowserTest没有允许您获取<li>文本的方法。

答案 1 :(得分:0)

尝试其中一项 - 长期通过id和所有级别或短期直接进行:

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

xpath=//li[text()="Enter your code."]