2016-04-13 8 views
4

Ich habe einen Link:Capybara-Webkit nicht umgehen kann Link mit Bootstrap glyphicon

link_to %q(<span class='glyphicon glyphicon-trash'/>).html_safe, feed_item, data: {confirm: 'Are you sure?',toggle: 'tooltip'}, method: :delete, title: 'Delete', id: 'delete_post' 

und die folgende Funktion spec Code

page.accept_confirm do 
    click_link 'delete_post' 
end 

und ich erhalte die folgende Fehler

Capybara::Webkit::ClickFailed: 
     Failed to find position for element /html/body/div[@id='wrapper']/div[@id='page-content-wrapper']/div/div[@id='main']/div[@id='main_content']/div[4]/div/div/div[1]/h3/div/a[@id='delete_post'] 

Wenn ich die Spanne mit dem Glyphicon durch einen Text zB ersetzen 'Löschen', der Test funktioniert. Dies scheint mit einem nicht aufgelösten issue auf Github verbunden zu sein, und möglicherweise mit CSS über das anklickbare HTML-Element überlagern. Ich kann jedoch nicht verstehen, wie diese Überlagerung in diesem Fall geschieht oder wie sie korrigiert wird.

Es ist eine gängige Praxis immer Symbole für allgemeine Aufgaben zu verwenden, wie ‚Bearbeiten“ oder ‚Löschen‘, so wäre es gut, eine Lösung für diese zu finden.

Wie kann ich dieses Problem umgehen?

Antwort

2

zu klicken war Umgehe dies, indem du den Test so modifizierst, dass du entweder mit JavaScript auf das Element klickst oder die Deckkraft des darüber liegenden Elements änderst. Stattdessen ging ich für das Folgende, das mehr auf Rails-Fähigkeiten beruht. Ich schrieb einen trash_icon Helfer wie folgt:

def trash_icon 
    if Rails.env.test? 
     'proxy_for_trash_icon' 
    else 
     "<span class='glyphicon glyphicon-trash'/>".html_safe 
    end 
    end 

und verändert mein Link zu:

link_to trash_icon, feed_item, data: {confirm: 'Are you sure?',toggle: 'tooltip'}, method: :delete, title: 'Delete', id: 'delete_post' 

und den Test:

page.accept_confirm do 
    click_link 'proxy_for_trash_icon' 
end 

Damit kann alles außer dem genauen Text/Symbol verwendet im Produktionssystem.

Dennoch wird hoffentlich jemand eine Lösung finden, die keine Umgehungslösung ist.

-1

Bauen sie Ihr capybara-webkit mit Qt 5.5.1 gibt in < 5.3 ein Problem war oder so, wo Pseudo-Elemente zu dem Link Größe haben keine so gibt nirgendwo es, dass die Menschen es scheint

+0

Alas aktiviert sein, ich bin mit Q5 5.5.1_1 und nur um sicher zu sein, habe ich wieder aufgebaut Capybara und Webkit mit http://stackoverflow.com/a/33643674/1299362, und das hat das Problem nicht gelöst. – Obromios

+0

Ich kann für den Kommentar hier bürgen, 551 löst dieses Problem nicht. (wir hackten herum und fügten eine minimale Breite hinzu: 1px; für Symbole in unserem Testlauf über eine page.evaluate_script-Injektion bei visit. –

2

Obwohl Obromios Antwort funktionieren würde, glaube ich nicht, dass es eine gute Idee ist, die Art, wie Sie Symbole rendern, zu ändern. Speziell, weil Sie die wenn Rails.env.test hinzufügen müssten? zu jedem Icon-Rendering, damit der Test funktioniert.

Was Sie tun können, ist diese verwenden:

find('.glyphicon.glyphicon-trash').trigger('click') 

statt dessen:

click_link 'delete_post' 
+0

musste ich 'find ('. glyphicon.glyphicon-trash') benutzen – GuiGS

0

Neben @ ariel_scherman Antwort, werden Sie nicht hinzufügen js: true zu Beginn vergessen wollen Ihres Testbeispiels.

Etwas wie folgt aus:

feature "delete the glyphicon", js: true do 
    ............ 
end 

dies Ihre Javascript-Treiber ermöglicht

Verwandte Themen