用水豚测试焦点

问题描述 投票:16回答:3

我的视图模板中有一个简单的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驱动程序不支持该驱动程序,为了避免每次测试运行时都打开浏览器,它使用了它。

ruby-on-rails-3 rspec integration-testing capybara
3个回答
26
投票

我刚刚使用了以下代码(使用phantomjs驱动程序,但我相信它也可以与webkit一起使用:]

page.evaluate_script("document.activeElement.id") == "some_id"

P.S。一年的问题,没有答案。他们应该给我徽章吗? :)


7
投票

您应使用:focus选择器,例如:

page.should have_selector('#category_name:focus')

0
投票

使用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)
© www.soinside.com 2019 - 2024. All rights reserved.