Capybara + Selenium не находит ссылку / кнопку FB-Connect

У меня есть следующий фрагмент в моем html, отображающий ссылку 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 in Cucumber (тег @javascript) они, похоже, вообще не находят элемент, на который нужно щелкнуть. Я пробовал несколько комбинаций, пытаясь сопоставить его, например:

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

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

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

Я также попытался сопоставить внутренний текст «Войти» или «кнопка входа в систему», но безрезультатно. Пытался последовать совету на странице Огурец и капибара, нажав элемент без ссылки или кнопки тоже, но это не сработало.

Я использую гем Facebooker2 для создания ссылки:

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

Версии гемов:

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

Намек? Спасибо.


person alp247    schedule 12.10.2010    source источник
comment
Я также пытался увеличить время ожидания несколькими способами, например, sleep 10 и Capybara.default_wait_time = 10. Не помогло.   -  person alp247    schedule 12.10.2010


Ответы (1)


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

no link with

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

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

Опять же, я не знаю о Cucumber, но просто с Capybara я бы сделал:

page.first(:xpath, '//[@id="mylogin"]').click
person GlyphGryph    schedule 07.10.2011