在Capybara中,我有几个命令要在共享一些相同父节点的节点上执行,但在少数情况下,我需要引用一个完全不同的节点。这可以这样写:
find('.the .same #part').find('#different_part1').set...
find('.the .same #part').find('.different_part2').set...
find('#a_completely_different_path').set...
find('.the .same #part').find('#different_part3').set...
find('.the .same #part').find('.different_part4').set...
我想使用within
方法将它们放在一起,但对于具有完全不同路径的节点,我需要引用within
块之外的上下文。我不知道该怎么做:
within('.the .same #part') do
find('#different_part1').set...
find('.different_part2').set...
# find('#a_completely_different_path').set...
find('#different_part3').set...
find('.different_part4').set...
end
如何暂时摆脱within
的影响并参考'#a_completely_different_path'
?
答案 0 :(得分:4)
查看within的来源,
def within(*args)
new_scope = if args.first.is_a?(Capybara::Node::Base) then args.first else find(*args) end
begin
scopes.push(new_scope)
yield
ensure
scopes.pop
end
end
您应该可以向Session
添加一个反转功能的方法,例如。
def without
current_scope = scopes.pop
yield
ensure
scopes.push(current_scope)
end
这应该允许您执行以下操作:
within('.the .same #part') do
find('#different_part1').set...
find('.different_part2').set...
without { find('#a_completely_different_path').set... }
find('#different_part3').set...
find('.different_part4').set...
end
答案 1 :(得分:2)
我找到了办法。使用within('.the .same #part') do
find('#different_part1').set...
find('.different_part2').set...
page.document.find('#a_completely_different_path').set...
find('#different_part3').set...
find('.different_part4').set...
end
。
BETWEEN