Capybara + Selenium没有找到FB-Connect链接/按钮

时间:2010-10-12 15:02:52

标签: ruby-on-rails selenium cucumber facebooker capybara

我的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>

手动点击时效果很好。但是当在Cucumber(@javascript标签)中使用Capybara + Selenium时,他们似乎根本没有找到要点击的元素。我尝试了几种尝试匹配它的组合,例如:

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 gem来生成链接:

#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 :(得分:0)

我不使用Cucumber,但根据我的理解,当你在Capybara中寻找一个元素时,它会检查'content'和'name'。当然,它特别说它在你的错误信息中查找ID,所以可能没有。我认为实际问题是:

no link with

在您的错误消息中,因为这意味着它正在寻找链接,并且您没有链接,那么您有一个javascript元素。

但是,如果你想检查'id',我会尝试专门要求它查找参数id ='mylogin'的元素,可能通过不同的方法,比如xpath。

同样,我不知道Cucumber,但只是与Capybara我会这样做:

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