Capybara + Selenium не находит ссылку / кнопку FB-Connect - PullRequest
0 голосов
/ 12 октября 2010

В моем 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 в 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)

Есть подсказка? Благодаря.

1 Ответ

0 голосов
/ 07 октября 2011

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

no link with

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

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

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

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