我同意这开始接近“测试浏览器”了验证,这是你可以验证的。
在网络艺术方面有一些很好的背景
浏览器端验证是由特定输入类型(您可以通过 watir 的.type
方法检查)和新required
属性(可能更难检查)的组合触发的Watir 中的功能。我想我们可以使用一种.required?
方法,该方法应该支持所有支持新“必需”属性的输入元素,并且如果存在“必需”属性,则返回 true。
因此,目前您可以做的是,如果您知道您在支持此功能的 HTML5 浏览器上运行,您可以检查输入类型是否为“电子邮件”以及是否存在“必需”属性。(我不知道如何做到这一点,但也许其他人可以提出一种方法)。
要确定的另一件事是提供无效值,并确保表单不允许自己被提交。例如,验证是强制执行的,还是仅仅是建议性的。(并且不要忘记通过使用 curl 或 httparty 之类的方式提交无效数据来检查服务器端,因为敌对用户可以轻松绕过任何浏览器验证并提交带有虚假甚至“敌对”值的表单以导致缓冲区溢出或注入攻击。任何站点都不应完全依赖客户端验证。)
当然要考虑的另一件事是,如果用户使用的浏览器不支持该特定验证功能,那么页面会做什么?我假设某种客户端 javascript 和显示的消息。
在这种情况下,它实际上取决于消息“出现”的方式。在我正在测试的应用程序中,这类消息恰好位于一个方便的 div 中,这些 div 具有由 css 控制的独特类,通常被隐藏,然后在客户端 JS 检测到需要显示消息时设置为显示用户。所以当然我有类似的东西的测试。这是同意我们的条款和条件的人的示例。(注意:我们使用 Cucumber 和 Test-Factory gem 来做页面对象和数据对象)
让我们从消息开始,以及 right-click.examine-element 揭示的内容
文件上的场景grower_selfregister.feature
是这样的
Scenario: self registering grower is required to agree to terms and conditions
Given I am a unregistered grower visiting www.climate.com
When I try to self-register without agreeing to the terms and conditions
Then I am informed that Acceptance of the terms and conditions is required
And I remain on the register page
Cucumber 的关键步骤是:
When /^I try to self-register without agreeing to the terms and conditions$/ do
@my_user.self_register(:agree_to_terms => FALSE)
end
Then /^I am informed that Acceptance of the terms and conditions is required$/ do
on Register do |page|
page.agree_to_terms_required_message.should be_visible
end
end
Then /^I remain on the register page$/ do
on Register do |page|
#ToDo change this to checking the page title (or have the page object do it) once we get titles
page.url.should == "#{$test_site}/preso/register.html"
end
end
register.rb
页面对象的相关部分是
class Register < BasePage
#bunch of other element definitions removed for brevity
element(:agree_to_terms_required_message) {|b|b.div(:class => "terms-error")}
end
这有助于提供一个例子吗?
注意:很容易认为第二次验证(留在页面上)是多余的,因为如果我不在页面上,我不太可能看到该消息。但它增加了场景中描述的预期用户体验的清晰度此外,如果实施更改位置可能非常重要,例如,如果决定使用类似 javascript 警报之类的东西,那么验证这一点可能很重要一旦被解雇(“我看到消息”步骤可能会做的事情),用户无论如何都没有进入该网站。