I've created an acceptable workaround, which is to assign an ID of
"not_current" to any <li> with an ID of "current".
The step definition is now:
response.should have_selector("li#not_current") do |li|
Then /^the "([^\"]*)" tab should not be current$/ do |content|
li.should contain(content)s.
end
end