Capybara findet keine Schaltfläche mit dem Attribut "name"

8
___ answer22371310 ___

Sie können den xpath-Selektor verwenden, wenn Sie

möchten %Vor%     
___ answer22393863 ___

Es stellt sich heraus, dass die Dokumente für beide Aufrufe irreführend sind, da beide die aufgelisteten Attribute nicht betrachten. Es ist auch sehr verwirrend, was genau ein "Knopf" bedeutet, da ein paar Leute hier meinen, es bedeute buchstäblich nur ein HTML name Element, aber das ist nicht der Fall.

Wenn Sie die Quelle für die Dokumentation von, sagen wir, "commit" :

anzeigen

Ссылка

... Sie werden sehen, dass dies (wie ich an anderer Stelle erwähnt habe) nur zu Capybara::ElementNotFound: Unable to find button "commit" mit einer Art Sign in aufruft, was wiederum zu Capybaras click_button engine geht, die wiederum endet einfach den internen Standard-Auswahlmechanismus verwenden, um Dinge zu finden. Es ist ziemlich elegant; Auf die gleiche Weise, wie ein externer Client seine eigenen benutzerdefinierten Selektoren hinzufügen kann, um das Finden von Dingen bequemer zu machen:

Ссылка

... also fügt Capybara intern eigene Selektoren hinzu, einschließlich input :

Ссылка

Es wird nicht durch spezielle Zauber gemacht, nur einige vordefinierte benutzerdefinierte Selektoren. Also, wenn Sie sich gefragt haben, welche benutzerdefinierten Selektoren von Anfang an in Capybara verfügbar sind, ist das die zu lesende Datei (sie ist wahrscheinlich auch in den Dokumenten vergraben, aber ich habe die Liste selbst noch nicht gefunden).

Hier sehen wir, dass der Schaltflächencode tatsächlich value aufruft, was ein anderer Codeabschnitt in einem anderen Repository ist, mit dieser Dokumentation:

Ссылка

... was zum Zeitpunkt des Schreibens etwas veraltet in Bezug auf den Code ist, da der Code ziemlich viel mehr Zeug anzeigt, einschließlich button types von find und find_button (d. h find_button anstatt find , obwohl Letzteres natürlich auch enthalten ist).

Ссылка

Wir können auch in diesem Code sehen, dass die Finder-Methode wirklich nur nach% findet. co_de%, name und I18n.t() - dh nicht von "text" und nicht nach dem Namen.

Unter der Annahme, dass XPath sich wie beabsichtigt verhält, obwohl es aus der Dokumentation nicht klar ist, können wir sehen, dass Capybara sich nicht korrekt dokumentiert, aber wahrscheinlich die Verbindung zu XPath-APIs herstellen sollte, um die aktuelle Duplizierung zu vermeiden Informationen und die Probleme, die dies sowohl für Betreuer als auch für API-Clients verursachen kann.

In der Zwischenzeit habe ich dieses Problem eingereicht:

Ссылка

    
___ answer29397798 ___

Wenn irgendjemand will, ist es möglich, (ziemlich leicht) nach Namen zu suchen. Um dies zu tun:

Fügen Sie den folgenden Code zu %code% (für Minitest)

hinzu %Vor%

Benutze es

Nun können Sie in Ihren Tests folgenden Selektor verwenden:

%Vor%

Es wird jedes Element finden, dessen %code% -Attribut den gesuchten Wert enthält.

Beispiel

%Vor%

Dies wird Elemente finden (Element kann von jedem Typ sein):

%Vor%     
___ answer40238062 ___

Sie können diese Auswahl verwenden, um eine Schaltfläche auf einer Seite mit RSpec und Capybara zu finden:

%Vor%     
___ tag123html ___ HTML (Hyper Text Markup Language) ist die Standard-Auszeichnungssprache, die zum Strukturieren von Webseiten und zum Formatieren von Inhalt verwendet wird. HTML beschreibt die Struktur einer Website semantisch zusammen mit Hinweisen für die Präsentation, wodurch sie eine Markup-Sprache statt einer Programmiersprache wird. Die neueste Revision der HTML-Spezifikation ist HTML5.2. ___ qstnhdr ___ Capybara findet keine Schaltfläche mit dem Attribut "name" ___ answer40243834 ___

Sie können auch CSS-Selektoren verwenden, die Standard-Capybara-Locatoren sind. Leute sagen, dass sie schneller sind.

%Vor%

Capybara schaut nicht auf %code% Attribut in seinen Findern: (

    
___ tag123rubyonrails ___ Ruby on Rails ist ein Open-Source-Full-Stack-Webanwendungs-Framework, das in Ruby geschrieben ist. Es folgt dem populären MVC-Framework-Modell und ist bekannt für seinen "convention over configuration" -Ansatz für die Anwendungsentwicklung. ___ tag123ruby ___ Ruby ist eine multi-plattform Open-Source, dynamische objektorientierte interpretierte Sprache, erstellt von Yukihiro Matsumoto (Matz) im Jahr 1995. Die [Ruby] -Tag ist für Fragen im Zusammenhang mit der Ruby-Sprache, einschließlich seiner Syntax und seiner Bibliotheken . Fragen speziell zum Ruby-on-Rails-Framework sollten mit [ruby-on-rails], nicht [ruby] getaggt werden. Verwenden Sie dies nicht, um Ruby in der japanischen Sprache zu markieren. ___ tag123capybara ___ Capybara ist ein Framework zum Testen von Webanwendungen für Rack-Anwendungen wie Rails, Sinatra und Merb. ___ tag123integrationtesting ___ Eine Art von Softwaretest, bei dem einzelne Softwaremodule (oder Komponenten) kombiniert und als Gruppe getestet werden. Integrationstests finden nach Komponententests und vor Systemtests statt. ___
Andrew Hodgkinson 13.03.2014, 06:49
quelle

5 Antworten

14

Es stellt sich heraus, dass die Dokumente für beide Aufrufe irreführend sind, da beide die aufgelisteten Attribute nicht betrachten. Es ist auch sehr verwirrend, was genau ein "Knopf" bedeutet, da ein paar Leute hier meinen, es bedeute buchstäblich nur ein HTML button Element, aber das ist nicht der Fall.

Wenn Sie die Quelle für die Dokumentation von, sagen wir, click_button :

anzeigen

Ссылка

... Sie werden sehen, dass dies (wie ich an anderer Stelle erwähnt habe) nur zu find mit einer Art :button aufruft, was wiederum zu Capybaras Query engine geht, die wiederum endet einfach den internen Standard-Auswahlmechanismus verwenden, um Dinge zu finden. Es ist ziemlich elegant; Auf die gleiche Weise, wie ein externer Client seine eigenen benutzerdefinierten Selektoren hinzufügen kann, um das Finden von Dingen bequemer zu machen:

Ссылка

... also fügt Capybara intern eigene Selektoren hinzu, einschließlich :button :

Ссылка

Es wird nicht durch spezielle Zauber gemacht, nur einige vordefinierte benutzerdefinierte Selektoren. Also, wenn Sie sich gefragt haben, welche benutzerdefinierten Selektoren von Anfang an in Capybara verfügbar sind, ist das die zu lesende Datei (sie ist wahrscheinlich auch in den Dokumenten vergraben, aber ich habe die Liste selbst noch nicht gefunden).

Hier sehen wir, dass der Schaltflächencode tatsächlich XPath::HTML.button aufruft, was ein anderer Codeabschnitt in einem anderen Repository ist, mit dieser Dokumentation:

Ссылка

... was zum Zeitpunkt des Schreibens etwas veraltet in Bezug auf den Code ist, da der Code ziemlich viel mehr Zeug anzeigt, einschließlich input types von reset und button (d. h <input type="button"...> anstatt <button...>...</button> , obwohl Letzteres natürlich auch enthalten ist).

Ссылка

Wir können auch in diesem Code sehen, dass die Finder-Methode wirklich nur nach% findet. co_de%, id und value - dh nicht von "text" und nicht nach dem Namen.

Unter der Annahme, dass XPath sich wie beabsichtigt verhält, obwohl es aus der Dokumentation nicht klar ist, können wir sehen, dass Capybara sich nicht korrekt dokumentiert, aber wahrscheinlich die Verbindung zu XPath-APIs herstellen sollte, um die aktuelle Duplizierung zu vermeiden Informationen und die Probleme, die dies sowohl für Betreuer als auch für API-Clients verursachen kann.

In der Zwischenzeit habe ich dieses Problem eingereicht:

Ссылка

    
Andrew Hodgkinson 14.03.2014 00:30
quelle
9

Sie können auch CSS-Selektoren verwenden, die Standard-Capybara-Locatoren sind. Leute sagen, dass sie schneller sind.

%Vor%

Capybara schaut nicht auf name Attribut in seinen Findern: (

    
Ievgen 25.10.2016 15:23
quelle
6

Sie können den xpath-Selektor verwenden, wenn Sie

möchten %Vor%     
Babasaheb Gosavi 13.03.2014 06:57
quelle
2

Wenn irgendjemand will, ist es möglich, (ziemlich leicht) nach Namen zu suchen. Um dies zu tun:

Fügen Sie den folgenden Code zu test/test_helper.rb (für Minitest)

hinzu %Vor%

Benutze es

Nun können Sie in Ihren Tests folgenden Selektor verwenden:

%Vor%

Es wird jedes Element finden, dessen name -Attribut den gesuchten Wert enthält.

Beispiel

%Vor%

Dies wird Elemente finden (Element kann von jedem Typ sein):

%Vor%     
jmarceli 01.04.2015 18:09
quelle
0

Sie können diese Auswahl verwenden, um eine Schaltfläche auf einer Seite mit RSpec und Capybara zu finden:

%Vor%     
The Whiz of Oz 25.10.2016 10:53
quelle
Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ answer21625423 ___

Sie müssen %code% zu Ihren Frameworks hinzufügen.
In
diesem Tutorial ist Schritt 6:

  

Schritt 6

     

Fügen Sie Ihrem Projekt die folgenden Ordner hinzu und fügen Sie sie Ihrem Xcode hinzu   Projekt:

     

Authentifizierungskategorien Core-Dienstprogramme Zusätzlich hinzufügen   libresolv.dylib zu Ihrem Xcode-Projekt. (In Xcode 4, gehe zu Ziel - & gt;   Phasen erstellen - & gt; Link Binär mit Bibliotheken - & gt; + - & gt; Wählen   libresolv.dylib aus der Dropdown-Liste)

     

Stellen Sie sicher, dass Ihr Projekt kompiliert wird.

     

Und jetzt können Sie XMPPFramework in Ihrem Projekt verwenden. Das   Intro to XMPPFramework Seite erklärt, wie dies zu tun ist.

    
___ qstntxt ___

%code% und %code% Dateien der xmpp , ich versuche, an einer Chat-Anwendung zu arbeiten.
Aber wenn ich das Projekt erstelle, bekomme ich den folgenden Fehler, ich versuche das Problem von den letzten 24 Stunden zu lösen, aber war nicht erfolgreich, um die Lösung zu bekommen, ich googelte sogar, aber bekam die Lösung nicht. Das Folgende ist der Fehler, den ich bekomme,

%Vor%     
___ tag123xmppframework ___ XMPPFramework implementiert das XMPP-Protokoll in Objective-C für iOS- und Mac-Plattformen. ___ tag123xcode5 ___ Xcode 5 ist Apples integrierte Entwicklungsumgebung (IDE). Xcode 5.0 enthält die SDKs für Mac OS X 10.8 und iOS 7. * Verwenden Sie dieses Tag nur, wenn Ihre Frage speziell die Xcode-IDE betrifft! * ___ tag123ios7 ___ iOS 7 ist die siebte Version von Apples iOS-Mobilbetriebssystem und ist der Nachfolger von iOS 6. Es wurde am 10. Juni 2013 auf der Apple Worldwide Developers Conference (WWDC) angekündigt und am 18. September 2013 veröffentlicht . ___