如何使用cucumber测试HTML5页面中的错误条件?

如何使用cucumber测试HTML5页面中的错误条件?,html,cucumber,bdd,Html,Cucumber,Bdd,我正在用Cucumber测试web应用程序的行为(在引擎盖下使用Selenium和Watir)。我的web应用程序有HTML5页面,并使用了新的“必需”属性。如果我有一个带有必填字段的数据输入表单,并且我提交该表单时字段为空,我希望验证web应用程序是否正确响应错误条件 不幸的是,当使用HTML5 web浏览器进行测试时,Cucumber似乎无法通过web驱动程序访问失败字段验证时弹出的错误消息。在任何情况下,都不会提交表单,页面仍保留在数据输入表单上 另一方面,当测试headless或使用不兼

我正在用Cucumber测试web应用程序的行为(在引擎盖下使用Selenium和Watir)。我的web应用程序有HTML5页面,并使用了新的“必需”属性。如果我有一个带有必填字段的数据输入表单,并且我提交该表单时字段为空,我希望验证web应用程序是否正确响应错误条件

不幸的是,当使用HTML5 web浏览器进行测试时,Cucumber似乎无法通过web驱动程序访问失败字段验证时弹出的错误消息。在任何情况下,都不会提交表单,页面仍保留在数据输入表单上

另一方面,当测试headless或使用不兼容HTML5的浏览器时,表单可能会提交,从而允许我的web应用程序捕获错误并将用户发送回表单页面,并显示错误消息

在第二种情况下,我可以很容易地测试错误消息的存在,因为它是页面中交付的HTML的一部分。我的问题是,我看不出如何编写一个测试场景来验证headless和HTML5浏览器情况下的错误条件

在Selenium和Watir web驱动程序的当前状态下,这可能是不可能的。但是如果有人知道我如何验证HTML5“必需”错误弹出消息,那将是一个很大的帮助

编辑2012-06-02: 下面是一个HTML5浏览器警告示例


有一个必需的文本和select,一个显示内部提示文本的文本框,以及一个带有regex输入验证的文本框。该页面没有任何CSS或javascript来混淆问题,它只是普通的HTML5。有关完整的细分,请参阅。表单提交给一个简单的CGI脚本,该脚本只响应表单输入,假设表单成功。提交失败将保留在示例表单页面上。

我以前没有使用过HTML5
required
属性。但是从外观上看,
required
属性只是提醒浏览器必须填写表单字段(即DOM不会更改)

在我看来,合理的做法是断言
required
属性存在于相应表单字段的HTML中。HTML5浏览器和非HTML5浏览器都应该通过该测试


在我看来,尝试断言任何比这更重要的东西就像是在测试浏览器的功能。

除了验证所创建的HTML是否正确以启用浏览器验证之外,我不确定您能做多少,这并不等于测试浏览器,也不等于测试代码

使用watir或watir webdriver,您可以使用.type验证输入是否设置了正确的类型(例如电子邮件),这是控制浏览器验证的一个因素。另一个是required属性的存在,这可能有点诡计。attribute_value(“required”)可能会工作,但通常会返回属性的值,因此不确定该方法将如何响应布尔属性。其他选择可能是查看.attribute_列表和


这似乎也是瓦蒂尔在这里添加一个很好的理由。需要吗?方法来输入元素,以便轻松检查是否已设置该属性。因此,我要求提供该功能

您应该准备好CSS选择器,以针对特定字段并查找错误标识符。是否可见。需要有一个详细的步骤定义。

一个解决方案是不使用Cucumber测试错误行为,而是测试您是否配置了字段

所以用Cuke的话来说,你可能有

Given I am filling in my form
Then I should see that my name is required
然后写一些东西,在html标记的name字段中查找所需的选项


除此之外,测试的是浏览器,而不是应用程序

是否有一个在线示例使用了我们可以查看的“required”属性?我创建了一个小示例。它不是详尽无遗的,但应该提供足够的资源来使用。请参阅上面的“编辑到原始”帖子。我越想,测试HTML5错误不是问题——那将是测试浏览器是否按设计工作。问题在于在使用HTML5表单编写HTML时测试服务器验证。我不想在测试环境中使用不同的HTML代码。如果Selenium和/或Watir:Webdriver可以像启用javascript一样启用/禁用HTML5响应,那就最好了。正如您所知,我不相信W3C。当我必须验证一个元素时,我唯一能做的事情就是:p$browser.element(:css=>“input:invalid”)。是否存在?p$browser.element(:css=>“输入:必需”)。是否存在?如果有人有更好的东西,或者我们如何根据布尔属性获取弹出式HTML5的文本,如果它的值为真,则返回
true
,如果它的值为假,则返回
nil
,这与Chuck van der Linden的答案几乎相同。很抱歉。