2016-07-08 14 views
0

Ich habe eine Situation in meiner Sicht, wo ein anklickbares Symbol nur sichtbar ist, wenn es div enthält (mit Knockout JS, SCSS). Etwas wie folgt aus:Capybara mit Selen: Ich kann nicht auf verstecktes Element klicken

HTML

<div id="button_div"> 
    <i id="icon" data-bind="click: dosomething"></i> 
</div> 

SCSS

i { 
    display: none; 
} 

#button_div:hover { 
    i { 
     display: block; 
    } 
} 

Alles funktioniert auf der Seite gut, aber ich kann nicht scheinen, um herauszufinden, wie das Element in Capybara klicken. Ich habe versucht, das Hinzufügen von: sichtbaren Symbol der Methode, aber ohne Glück:

find('#icon', visible: false).click 

Das gibt mir die ein „Selenium :: WebDriver :: Fehler :: ElementNotVisibleError“ Fehler.

Verwendung:

Capybara.ignore_hidden_elements = false 

gibt mir genau die gleichen Fehler

ich auch eine Selen Aktion versucht habe, mit wie:

button_div_element = find('#button_div').native 
button_element = find('#button', visible: false).native 
page.driver.browser.action.move_to(button_div_element).click(button_element).perform 

Während dies keinen Fehler werfen Es klickt auch nicht auf den Button.

Hat jemand eine Idee, was ich falsch machen könnte?

Antwort

0

nach einigen mühsamen Versuch und Irrtum verpassen führen kann, habe ich es geschafft, eine Lösung zu finden, die

arbeitete
button_div = find("#button_div_id").native 
icon = find("#icon_id").native 
page.driver.browser.action.move_to(button_div, :right_by => -50).click.perform 
icon.click 

nicht sicher, warum ich hatte Capybara manuell sagen, um 50px nach links zu gehen, aber das scheint den Trick getan zu haben.

auch, habe ich die folgende Zeile Code zu meinem Setup:

page.driver.browser.manage.window.maximize 

Dies stellt sicher, dass das Fenster vor dem Ausführen des Tests maximiert wird. Ich bin mir nicht 100% sicher, aber das hätte auch etwas mit der Behebung zu tun.

0

Versuchen .execute_script() wie unten verwenden: -

button_div_element = find('#button_div').native 
button_element = find('#button', visible: false).native 
page.driver.browser.action.move_to(button_div_element).perform 
page.driver.browser.execute_script("arguments[0].click()", button_element) 

Hoffe, es funktioniert ... :)

1

Capybara ausgelegt ist, um einen Benutzer zu emulieren, so dass Sie nicht auf einem nicht sichtbaren Element klicken können weil ein Benutzer nicht konnte. Sie sollten jedoch in der Lage sein einen Benutzer Aktion zu replizieren das Elemente sichtbar zu machen und es dann

find('#button_div').hover 
find('#icon').click 

klicken, wenn diese keinen Fehler erhöhen, sondern auch nicht erscheinen die Schaltfläche klicken versuchen, einen kurzen setzen Schlaf zwischen den beiden Aktionen, da Sie ein animiertes Aussehen haben können, die Klicks Artikel

+0

Dies scheint wie es sollte funktionieren, aber es nicht (zumindest für mich). Ich erhalte den Fehler "Element nicht gefunden", wenn ich auf das Symbol klicke. – nmg49

+0

Hmm, dieses genaue Verhalten ist in Capybara getestet - https://github.com/jnicklas/capybara/blob/2a51b817b355f6c1a5e95a471a87f1a492562e55/lib/capybara/spec/session/node_spec.rb # L266 - nicht sicher, was in Ihrer App anders ist –

+0

@ nmg49 was anderes CSS auf das Symbol –

Verwandte Themen