2016-04-12 21 views
2

Ich habe eine Frage läuft bereits mit diesem Problem verbunden, aber diese Frage ist für einen anderen Ansatz.Ersetzen von Text mit Regexp Ruby Capybara

Ich habe eine Textzeichenfolge auf einer Webseite, die einen Zeitstempel (hhmmss) enthält, nachdem eine Transaktion abgeschlossen ist.

Ich kann Time.now nicht verwenden, da die Verarbeitungszeit abhängig von vielen Faktoren variiert.

Der Text auf Seite lautet:

"Your transaction reference number is: 0 16123 (timestamp is here) A1" 

ich im Elemente suchen würde mit dem Text in meinem Test zu lesen:

expect(find(location)).to have_text trans_text 

Kann ich den Standort Text als Variable :

dann ersetzen Sie den Zeitstempel durch eine Regex dann erwarten Sie, dass Timestamp zwischen zwei Mal sein?

Ich habe zu tun versucht:

trans_text = find(location, text: 'Your transaction reference number is: 0 16123 (\d+) A1') 

hatte aber keine Freude. Ich erhalte den folgenden Fehler:

Unable to find css "#main > div > div.section-content > div.two-col.retention-success > div.second-col > div.alert-complete > p" with text "Your retention certificate number is: 0 16123 (/d+) A1". 

Wie könnte ich Eingabe eines regex den Zeitstempel Teil des Textes zu ersetzen?

Dank

+0

Wh Im Format ist der Zeitstempel, können Sie ein Beispiel geben? Versuchen Sie '(\ w +)' anstelle von '(\ d +)' oder sogar '(. * +)' – Druzion

+0

Das Format ist (hhmmss). "'Ihre Transaktionsreferenznummer lautet: 0 16123 120000 A1')". strftime wäre ('% H% M% S') – Tom

+0

Ich habe bearbeitet, um hinzuzufügen, zeige den Fehler, den ich bekomme – Tom

Antwort

0

Nach Capybara documentation:

text (String, Regexp) — Only find elements which contain this text or match this regexp

Sie haben von regulären Ausdrücken (anstelle einer Zeichenfolge) suchen:

find('p', text: /Your transaction reference number is: 0 16123 (\d+) A1/) 

Oder Überprüfung in einem Schritt:

expect(page).to have_text /Your transaction reference number is: 0 16123 (\d+) A1/ 
+0

@Tom hilft diese Hilfe? –