带有 BrowserTest Slim 夹具插件的 Fitnesse 中的 Xpath 不适用于 ul li

Xpath in Fitnesse with BrowserTest Slim fixture plugin doesn't work with ul li

我一直在尝试从以下内容中找出第一条错误消息 html 在 Fitnesse test using BrowserTest 纤薄夹具中。

<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 returns [null] 其中第二个和第三个 returns [0].

预期的结果是Enter your code.

如果我把li完全拿出来

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

然后它 returns

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

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

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

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

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

不幸的是,所有 <li> 元素在 HTML 中都有一个隐含的 'value' 属性,这就是 BrowserTest 的 value of returning,直到版本 2.5 .1.因此,您的第二个和第三个 XPath 对于 select 您要查找的项目是绝对正确的。不幸的是,returned 的值不是您 expect/want 的值。 如果您在 2.5.1 版本中再次尝试它们,它们应该可以工作。


背景

value of 最初设计为 return 输入元素的值(在它们的 'value' 属性中),并且具有回退行为,因此如果找到的元素执行 'value' 属性其 text() 是 returned。这在大多数情况下工作得很好,但是对于 <li> 来说是一个痛苦,即使页面源中有 none 也有一个 value 属性。 在 2.5.1 之前,BrowserTest 没有允许您获取 <li> 文本的方法。