Ich würde zustimmen, dass dies beginnt Wenn der Code von dieser Browserfunktion abhängt, muss die Site den richtigen HTML-Code (5) erstellen, damit der Browser weiß, dass Sie diese Validierungsebene haben möchten, und das können Sie bestätigen.
Einig guter Hintergrund auf diesem bei art of the web
Die Browser-Seite Validierung durch die Kombination des spezifischen Eingabetypen ausgelöst wird (die Sie über die watir .type
Methode überprüfen konnten) und das neuen required
Attribut (die tricker sein könnte, Ich denke, ich sehe hier einen guten Grund für ein neues Feature in Watir. Ich denke, wir könnten eine .required?
-Methode verwenden, die für alle Eingabeelemente unterstützt werden sollte, die das neue 'required'-Attribut unterstützen, und würde true zurückgeben, wenn das' required'-Attribut vorhanden ist.
Im Moment können Sie, wenn Sie wissen, dass Sie einen HTML5-Browser verwenden, der diese Funktion unterstützt, beide prüfen, ob der Eingabetyp "E-Mail" ist und auch das erforderliche Attribut vorhanden ist . (Ich habe keine Ahnung, wie das geht, aber vielleicht kann jemand anders einen Weg vorschlagen).
Die andere Sache, um sicher zu sein, würde sein, einen ungültigen Wert zur Verfügung zu stellen, und stellen Sie sicher, dass das Formular sich nicht erlaubt, vorgelegt zu werden. z.B. ist die Validierung durchgesetzt, oder nur beratend. (Und vergessen Sie nicht, die Server-Seite zu überprüfen, indem Sie mit curl oder httparty trotzdem ungültige Daten senden, da ein feindseliger Benutzer leicht jede inbrowser-Validierung umgehen und dieses Formular mit gefälschten oder sogar 'feindlichen' Werten übergeben könnte, die einen Puffer verursachen Überlauf- oder Injektionsangriff: Keine Site sollte ausschließlich von der Client-seitigen Validierung abhängen.)
Die andere Sache zu betrachten natürlich ist, wenn der Benutzer in einem Browser ist, der diese bestimmte Überprüfungsfunktion NICHT unterstützt, was macht die Seite dann? Ich würde eine Art von clientseitigem Javascript und eine Nachricht annehmen, die angezeigt wird.
In diesem Fall hängt es wirklich von der Art ab, in der die Nachricht "erscheint". In der App, die ich gerade teste, befinden sich Nachrichten dieser Art in handlichen divs mit eindeutigen Klassen, die von css gesteuert werden, um normalerweise ausgeblendet zu werden, und werden dann angezeigt, wenn die Clientseite JS die Notwendigkeit erkennt, eine Nachricht für die Nachricht anzuzeigen Benutzer. Natürlich habe ich Tests für solche Sachen. Hier ist ein Beispiel für jemanden, der unseren allgemeinen Geschäftsbedingungen zustimmt. (Hinweis: Wir verwenden Gurke, und der Test-Factory gem Seitenobjekte und Datenobjekte zu tun)
Fangen wir mit der Nachricht beginnen, und welche rechts click.examine-Element zeigt
das Szenario auf der grower_selfregister.feature
Datei sieht wie folgt aus
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
die kritischen Cucumber Schritte sind:
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
Die relevanten Teile der register.rb
Seite Objekt sind
class Register < BasePage
#bunch of other element definitions removed for brevity
element(:agree_to_terms_required_message) {|b|b.div(:class => "terms-error")}
end
, dass ein Beispiel nennen Hilft?
Hinweis: Es könnte leicht argumentiert werden, dass die zweite Validierung (auf der Seite bleiben) redundant ist, da ich die Nachricht wahrscheinlich nicht sehen werde, wenn ich nicht noch auf der Seite bin. Aber es fügt Klarheit zu der erwarteten Benutzererfahrung hinzu, die im Szenario beschrieben wird. Es könnte auch sehr wichtig sein, wenn die Implementierung wo zu ändern, zum Beispiel, wenn es entschieden wurde, etwas wie eine Javascript-Warnung zu verwenden, dann kann es wichtig sein, das zu validieren Einmal entlassen (etwas, was der Schritt "Ich sehe die Nachricht" wahrscheinlich tun würde), ging der Benutzer trotzdem nicht auf die Seite.
Wird die Warnung auf der Seite angezeigt? Meine erste Schätzung wäre, seine ID über Firebug zu erhalten und sie dann später zu verwenden. –
Die Warnung erscheint auf der Seite - Sie sehen es im Browserfenster, aber es erscheint nicht auf der Seite - nichts Neues erscheint im DOM. Zauber. :) –
Ich denke eigentlich, dass es keinen Sinn ergibt, weil das bedeutet, 3rd Party, nicht Web App zu testen. – p0deje