2010-10-12 2 views
0

У меня есть следующий фрагмент в моей HTML отображая ссылку FB-Connect:Капибара + Селен не найти FB-Connect ссылку/кнопку

<fb:login-button id="mylogin" onlogin="try { 
window.location.href = "http://localhost:3000/"; 
} catch (e) { alert('RJS error:\n\n' + e.toString()); alert('window.location.href = \"http://localhost:3000/\";'); throw e }"></fb:login-button> 

Это отлично работает при ручном нажатии его. Но при использовании Capybara + Selenium в Cucumber (тег @javascript) они, похоже, не находят элемент, который нужно щелкнуть. Я попробовал несколько комбинаций, пытаясь соответствовать этому, как:

When I follow "mylogin" # or 
When I press "mylogin" 

И я получаю ответы, как:

no link with title, id or text 'mylogin' found (Capybara::ElementNotFound) 

Я также попытался соответствием внутреннего текста «Логин-кнопка» «Войти» или, с нет. Пытался следовать совету в Cucumber and Capybara, clicking a non-link or button element тоже, но это не сработало.

Я использую камень Facebooker2 генерировать ссылку:

#in my index.html.haml 
= fb_connect_async_js 
= fb_login_and_redirect('http://localhost:3000/', id: 'mylogin') 

Gem версии:

capybara (0.3.9) #(actually pulling it from github directly) 
xpath (~> 0.1.2) 
selenium-webdriver (>= 0.0.27) 
cucumber (0.9.2) 

Любой намек? Благодарю.

+0

Я также попытался увеличить время ожидания нескольких способов, как «сон 10» и «Capybara.default_wait_time = 10 ". Не помогло. – alp247

ответ

0

Я не использую огурец, но из того, что я понимаю, когда вы ищете элемент в Capybara, он проверяет «контент» и «имя». Конечно, это конкретно говорит о том, что он ищет идентификатор в вашем сообщении об ошибке, так что, возможно, нет. Я думаю, что актуальная проблема является:

no link with 

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

Тем не менее, если вы хотите проверить 'id', я бы попросил его запросить элемент с параметром id = 'mylogin', возможно, с помощью другого метода, такого как xpath.

Опять же, я не знаю, о огурце, но только с Капибара я хотел бы сделать:

page.first(:xpath, '//[@id="mylogin"]').click 
Смежные вопросы