2016-07-26 13 views
1

Ich benutze Gurke mit Ruby und Watir Webdriver.Wie man eine Tabelle in Gurke mit Ruby verwendet, um Daten im Webformular zu verifizieren

Ich versuche zu überprüfen, dass Daten, die in einem Webformular vorab ausgefüllt werden, mit den Daten in einer Tabelle in der Feature-Datei in Cucumber übereinstimmen. Ich brauche Hilfe beim Schreiben des Ruby-Codes in der Schrittdefinitionsdatei. Hier ist, was ich bis jetzt habe:

Cucumber feature: 
Then I will be able to view my information pre-populated from IAM as follows: 

|First Name/Given Name |Chimwemwe  | 
|Last Name/Surname  |Rossi   | 
|Country    |USA    | 
|Address    |fdafda   | 
|City     |fdafd   | 
|State     |Louisana  | 
|Postal Code   |99999   | 

Then (/^I will be able to view my information pre-populated from IAM.$/) do |table| 
    information = table.rows_hash 
    information.each do |entry| 
    contact_info = entry [0] 
    if @browser.text_field(:name=>'firstName').verify_contains(contact_info[0])==true 
     puts "Passed" 
    else 
     puts "Failed" 
    end 
end 

Ich mache nur die erste Reihe für jetzt, bis ich es zur Arbeit bekomme. Ich möchte, dass es schließlich durch den Tisch iteriert.

Wenn ich versuche, das Skript auszuführen, bekomme ich nur diesen Fehler: #table ist eine Cucumber :: Core :: Ast :: DataTable.

Ich bin relativ neu in Ruby/Cucumber und das ist das komplizierteste Skript, das ich bisher geschrieben habe. Jede Hilfe dabei wäre sehr hilfreich. Ich weiß, ich brauche ein Array, aber ich habe so viel online gesehen, ich habe das Gefühl, dass mein Gehirn explodieren wird. Vielen Dank.

+0

Wo 'verify_contains' kommen aus? Ich denke nicht, dass das Watir ist, also nimmst du ein weiteres Juwel, um Watir zu ergänzen? –

+0

Vielleicht möchten Sie https://github.com/styleguide/ruby/syntax überprüfen .. es wird Ihnen nicht mit tatsächlichem Code helfen (z. B. wie Sie auf Elemente eines Hashes zugreifen), aber es wird Ihnen helfen, den Code in darzustellen eine Art, die zumindest nach richtigem Ruby-Code aussieht ;-) –

Antwort

1

Sofern Sie nicht einfach die Gurkentabelle den Watir-Feldern zuordnen können, ist eine Iteration möglicherweise nicht sinnvoll. Der einfachste Ansatz besteht darin, direkt zu überprüfen, ob jedes zu testende Feld mit der Tabelle übereinstimmt.

Ich bin nicht sicher, welche Behauptung Bibliothek, die Sie verwenden, sondern als Beispiel die folgenden verwendet die RSpec Erwartungen:

Then (/^I will be able to view my information pre-populated from IAM.$/) do |table| 
    information = table.rows_hash 

    expect(@browser.text_field(:name=>'firstName').value).to eq(information['First Name/Given Name']) 
    expect(@browser.text_field(:name=>'lastName').value).to eq(information['Last Name/Surname']) 
    # etc. for each field 
end 

Beachten Sie, dass der Test bei der ersten falschen Feld fehl. Wenn Sie auf einmal alle Felder behaupten wollen, können Sie sie in eine Hash abrufen und vergleichen Sie sie auf den Tisch:

Then (/^I will be able to view my information pre-populated from IAM.$/) do |table| 
    form_fields = { 
    'First Name/Given Name' => @browser.text_field(:name=>'firstName').value, 
    'Last Name/Surname' => @browser.text_field(:name=>'lastName').value 
    } 
    expect(form_fields).to eq(table.rows_hash) 
end 
+0

Danke Justin. Die zweite Option hat perfekt funktioniert. Ich dachte mir, dass ich es so machen müsste, aber diese Option hält das Skript am Laufen, auch wenn eine der Validierungen fehlschlägt. – Laura