2016-07-08 5 views
0

У меня есть ситуация, на которой я вижу, что значок с возможностью клика отображается только тогда, когда он содержит div, зависает (используя Knockout JS, SCSS). Что-то вроде этого:Capybara with Selenium: Невозможно нажать на скрытый элемент

HTML

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

SCSS

i { 
    display: none; 
} 

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

Все отлично работает на странице, но я не могу показаться, чтобы выяснить, как щелкнуть элемент в Капибара. Я попытался добавить: видимый символ метода, но не повезло:

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

Это дает мне в «Selenium WebDriver :: :: Error :: ElementNotVisibleError» ошибки.

Использование:

Capybara.ignore_hidden_elements = false 

дает мне ту же самую ошибку

Я также попытался с помощью Selenium действий, таких как:

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 

Хотя это и не выдаст ошибку , он также не нажимает кнопку.

Кто-нибудь знает, что я могу сделать неправильно?

ответ

0

После некоторого кропотливых проб и ошибок, мне удалось найти решение, которое работало

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 

Не знаю, почему у меня было вручную сообщить Capybara, чтобы он оставил 50px, но что, похоже, сделал трюк.

Кроме того, я добавил следующую строку в мой код установки:

page.driver.browser.manage.window.maximize 

Это гарантирует, что окно развернуто перед запуском теста. Я не уверен на 100%, но это могло также иметь какое-то отношение к исправлению.

0

.execute_script() Попробуйте использовать, как показано ниже: -

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) 

Надеется, что это будет работать ... :)

1

Капибара предназначена для эмуляции пользователя, так что вы не можете нажать на невидимый элемента потому что пользователь не смог. Вы должны, однако, иметь возможность повторить действия пользователей, чтобы сделать элемент видимым, а затем щелкните его

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

, если это не вызывает ошибку, но и не появляется, чтобы нажать кнопку попытаться поместить короткий сон между двумя действиями, так как вы можете иметь анимированный внешний вид, который может вызвать щелчки пропустить пункты

+0

Кажется, что он должен работать, но это не так (по крайней мере для меня). При попытке щелкнуть по значку я получаю ошибку «элемент не найден». – nmg49

+0

Хмм, это точное поведение проверено в capybara - https://github.com/jnicklas/capybara/blob/2a51b817b355f6c1a5e95a471a87f1a492562e55/lib/capybara/spec/session/node_spec.rb # L266 - не знаете, что в вашем приложении отличное –

+0

@ nmg49 что другой CSS применяется к значку –

Смежные вопросы