8

Bei einer einfachen Seite erscheint:Überprüfen Sie, ob „Bitte geben Sie eine E-Mail-Adresse“ -Meldung

<form> 
    <input type="email"> 
    <button>click</button> 
</form> 

Wenn ich etwas in Textfeld eingeben, die keine E-Mail und klicken Sie auf die Schaltfläche, erscheint Please enter an email address Nachricht.

Gibt es eine Möglichkeit zu überprüfen, ob die Nachricht mit Selenium oder Watir erscheint? Soweit ich sehe, erscheint nichts neues im Browser DOM.

Da die Seite verwendet E-Mail-Prüfung, die in Feature eines Browsers eingebaut ist, macht es sogar sinnvoll zu überprüfen, dass die Fehlermeldung angezeigt wird? Es ist auf der gleichen Ebene wie zu prüfen, ob die Browser-Bildlaufleiste funktioniert. Wir überprüfen nicht mehr die Webanwendung, sondern die Plattform (Browser).

Eine frühere Zusammenhang Frage hier auf SO ist: How do I test error conditions in HTML5 pages with cucumber?

+0

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

+2

Die Warnung erscheint auf der Seite - Sie sehen es im Browserfenster, aber es erscheint nicht auf der Seite - nichts Neues erscheint im DOM. Zauber. :) –

+3

Ich denke eigentlich, dass es keinen Sinn ergibt, weil das bedeutet, 3rd Party, nicht Web App zu testen. – p0deje

Antwort

4

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

The message as it appears on our registration page

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.

4

Sie mögen dieses

JavascriptExecutor js = (JavascriptExecutor) driver; 
driver.findElement(By.cssSelector("input[type='email']")).sendKeys("asd"); 
Object s=js.executeScript("return document.getElementById(\"a\").validity.valid"); 
System.out.println(s); 
driver.findElement(By.cssSelector("input[type='email']")).sendKeys("[email protected]"); 
s=js.executeScript("return document.getElementById(\"a\").validity.valid"); 
System.out.println(s); 

Ausgang für über der Linie ist

false 
true 

So basiert auf versuchen könnte, dass Sie zu dem Schluss, dass ob der angegebene Wert gültig ist oder nicht

Below Javascript Logik

document.getElementById(\"a\").validity.valid 

Ps true/false zurück, basierend auf der Gültigkeit des Feldes: Ich gehe davon aus Input-Tag hat id "a"

2

Ich habe keine Möglichkeit gefunden, nach der tatsächlichen Fehlermeldung zu suchen. Sie können jedoch überprüfen, dass das Eingabefeld ungültig ist, nachdem Sie eine Nicht-E-Mail-Adresse eingegeben haben, indem Sie den CSS-Pseudo-Selektor :invalid verwenden.

WebElement invalidInput = driver.findElement(By.cssSelector("input:invalid")); 
assertThat(invalidInput.isDisplayed(), is(true)); 
+0

diese Lösung funktioniert für Selen – e4c5