Jak*_*old 15 integration-testing rspec capybara ruby-on-rails-3
link_to_function我的视图模板中有一个简单的
<%= link_to_function "add new category", "$('#category_name').focus()" %>
Run Code Online (Sandbox Code Playgroud)
我想用capybara使用请求规范对此进行测试.基本上规范看起来应该是这样的
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
Run Code Online (Sandbox Code Playgroud)
问题是,我无法找到任何东西,这将检查元素是否具有焦点. 我唯一能找到的就是这个
page.evaluate_script('document.focus')[:id]
Run Code Online (Sandbox Code Playgroud)
然而,capybara-wekbit驱动程序不支持,我正在使用它来避免每次测试运行打开浏览器.
cut*_*ion 24
我刚刚使用了以下代码(使用phantomjs驱动程序,但我相信它也适用于webkit):
page.evaluate_script("document.activeElement.id") == "some_id"
Run Code Online (Sandbox Code Playgroud)
PS一年的问题没有答案.他们应该给我一张徽章吗?:)
你应该使用:focus选择器,例如:
page.should have_selector('#category_name:focus')
Run Code Online (Sandbox Code Playgroud)
使用 Selenium 驱动程序,您可以获得焦点元素:
page.driver.browser.switch_to.active_element
Run Code Online (Sandbox Code Playgroud)
然后你就可以用它做你喜欢做的事
page.driver.browser.switch_to.active_element.send_keys "some text"
Run Code Online (Sandbox Code Playgroud)
请注意,它返回 aSelenium::WebDriver::Element而find返回 a Capybara::Node::Element,因此在比较它们时要小心
expect(page.driver.browser.switch_to.active_element).to eql(find('#some-element').native)
Run Code Online (Sandbox Code Playgroud)