Capybara nicht finden, eine Taste mit einem "name" - Attribut

Einer W3C-validierte HTML-5-web-Seite enthält diese arbeiten, einfache Schaltfläche im login-Formular.

<input data-disable-with="Signing in, please wait&amp;hellip;"
       name="commit" type="submit" value="Sign in" />

Ich Schreibe ein weitgehend sinnlos-test 🙂 in einer Rails-3.2.17-Anwendung, die sich nur um den Dreh von Capybara und ich habe bereits vollkommen fest, Googeln, Lesen, Dokumentationen und das Lesen von Quellcode, um das test-framework, mit dem keine Freude haben - versucht, auf diese Schaltfläche, durch seine name (d.h. "commit") fehlschlägt.

click_button("commit")
find_button("commit")

Beide führen Capybara::ElementNotFound: Unable to find button "commit". Wenn ich verwenden Sie die Schaltflächen-text des Sign in dann das element ist gefunden, d.h. diese:

click_button("Sign in")
find_button("Sign in")

...funktionieren beide gut, so scheint es, dass der XML-parser ist nicht, dass Sie ohne Probleme bei jedem element.

Dokumentation für click_button sagt, dass der locator arbeitet auf "id, text oder Wert", mit "text" als bedeutungslos für eine input element (der sichtbare text ist entnommen aus der value Attribut), aber vielleicht relevant für button Elemente. So könnten wir erwarten, dass zu scheitern, aber wenn wir den code anzeigen über die Dokumentation, feststellen, dass es Anrufe auf find in der gleichen Weise wie find_button. Noch find_button ist unterschiedlich dokumentiert; es sagt es findet durch "id, name oder Wert". So traurig, wir wissen, dass die Dokumentation ist gebrochen, weil es sagt zwei verschiedene Dinge, für was sich ein identischer Anruf im back-end.

So oder so, wird das element nicht gefunden wird, indem Sie Namen, und das bedeutet, dass die untere Ebene find rufen Sie nicht auf der Suche name Attribute so weit wie ich sehen kann. Dies bedeutet Capybara (2.2.1, auf Nokogiri 1.6.1) ist ziemlich kaputt in dieser Hinsicht. Wie kommt es, niemand hat es gemerkt? Ich habe Gegoogelt, für Alter und es scheint nicht zu kommen. Ich scheine eher fehlt der Punkt 🙂

Warum nicht, ich Suche einfach nach dem englischen text in der Schaltfläche, die Sie stellen könnten? Durch die Internationalisierung. Diese alte, Schienen 1 -> 2 -> 3 aktualisierten app hat einige I18n-Teile und andere statische text-Teile. Ich möchte nicht gezwungen werden, sich zu setzen I18n-in jeder Ansicht, die Capybara-tests, nur so kann ich den test verwenden I18n.t() zu gewährleisten, eine übereinstimmung trotz unterschiedlicher Sprachen oder Gebietsschemas-Datei-updates. Ebenso klar wäre sehr dumm sein im Jahr 2014 zu schreiben hartcodierte englische Zeichenfolgen in meinen tests.

Deshalb haben wir die Namen und IDs und so... Die eindeutige (in der Theorie!) Bezeichner, die Maschine zu Lesen, nicht Menschen Lesen.

Konnte ich hack etwas, das CSS-ausgewählt von "type=submit" aber im ernst, warum nicht Capybara Suche das name-Attribut, wenn die Dokumentation sagt, es tut, und warum wird in der Dokumentation nicht einverstanden sind, auf welche Attribute durchsucht werden auf zwei Methoden nennen, die zu genau dem gleichen back-end-Implementierung mit genau den gleichen Parametern?

TIA 🙂

  • Capybara::ElementNotFound: Unable to find button "commit" Sie nicht über eine Schaltfläche, haben Sie eine Eingabe.
  • Das ist, was "klicken" bedeutet in diesem Zusammenhang. Die zugrunde liegenden find Anruf nimmt verschiedene Werte in den ersten parameter, der mit vielen verschiedenen Bedeutungen. Zum Beispiel kann ich pass :xpath oder :fillable_field. Sehen lib/capybara/selector.rb wie diese Hinzugefügt werden; :button geht XPath::HTML.button und rdoc.info/github/jnicklas/xpath/XPath/HTML sagt, dass diese Spiele "eine submit, image oder button element". Angesichts dieser, wenn Sie verantwortlich sind für die Frage, downvote würde ich es begrüßen, wenn Sie möchten, widerrufen, die.
  • Wenn Sie schreiben, die Frage Schnitt sich die Hälfte eines Gesprächs, um den Fokus nur auf das Thema, ich würde gerne.
  • Sie sind im Grunde sagen "tl;dr" (und du bist immer noch falsch, was diese Anrufe tun, siehe meinen anderen Kommentar). Wenn Sie nicht Lesen möchten, eine Frage-und Antwort-intelligent, bitte nicht verschmutzen StackOverflow mit sinnlosen Kommentare und downvotes. Lassen Sie uns die Dinge Zivil-und wie die technische und präzise wie möglich. Danke.
Schreibe einen Kommentar