我的视图模板中有一个简单的link_to_function
<%= link_to_function "add new category", "$('#category_name').focus()" %>
并且我想使用请求规格与水豚进行测试。基本上,规格应该看起来像这样
it "focuses category form when I click 'add new category'" do
visit new_article_path
click_link "add new category"
# unfortunately there's nothing like 'has_focus?'
find_field("category_name").should have_focus
end
问题是,我什么也找不到,它将检查元素是否具有焦点。我唯一发现的是这个
page.evaluate_script('document.focus')[:id]
但是capybara-wekbit
驱动程序不支持该驱动程序,为了避免每次测试运行时都打开浏览器,它使用了它。
我刚刚使用了以下代码(使用phantomjs驱动程序,但我相信它也可以与webkit一起使用:]
page.evaluate_script("document.activeElement.id") == "some_id"
P.S。一年的问题,没有答案。他们应该给我徽章吗? :)
您应使用:focus
选择器,例如:
page.should have_selector('#category_name:focus')
使用Selenium驱动程序,您可以获得重点突出的元素:
page.driver.browser.switch_to.active_element
然后您可以使用它来做自己喜欢的事
page.driver.browser.switch_to.active_element.send_keys "some text"
请注意,它返回Selenium::WebDriver::Element
,而find
返回Capybara::Node::Element
,所以在比较它们时要小心
expect(page.driver.browser.switch_to.active_element).to eql(find('#some-element').native)