我一直在尝试从以下消息中获取第一条错误消息html在Fitnesse测试中使用BrowserTest Slim fixture。
<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查询,在那里它似乎可以按预期工作。
以下是一个适合性测试用例示例:
|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>
的价值。
不幸的是,所有<li>
元素在HTML中都有一个隐式的"value"属性,而这正是BrowserTest的value of
在2.5.1版本之前返回的属性。因此,您的第二个和第三个XPaths选择您要查找的项目是绝对正确的。遗憾的是,返回的值不是您所期望/想要的值。如果您在2.5.1版本中再次尝试,它们应该可以工作。
背景
value of
最初被设计为返回输入元素的值(在其"value"属性中),并具有回退行为,因此如果找到的元素具有"value"特性,则返回其text()
。这在大多数情况下都很好,但对于具有值属性的<li>
来说是一件痛苦的事情,即使页面的源代码中没有值属性。2.5.1之前,BrowserTest没有允许您获取<li>
文本的方法。
尝试其中一个-通过id和所有级别的长级别或直接进行的短级别:
xpath=//div[@class="validation-errors"]/ul/li[text()="Enter your code."]
xpath=//li[text()="Enter your code."]