如何在Capybara的within块内临时跳出作用域访问外部元素?
在Capybara的within块内访问全局作用域的解决方案
Capybara并没有提供你设想的without方法,但有几种简洁的方式可以在within块内临时访问页面全局作用域,不用拆分原有的代码块:
直接使用
page.find:在within块中,普通的find会限定在当前作用域内查找元素,而page.find会直接在整个页面范围内查找元素,完美替代你想要的without效果。修改示例代码如下:within("some_scope") do find("something").click # 触发JS在作用域外生成元素 page.find("outer_thing").click # 全局查找并点击 # 继续在some_scope内执行后续操作 end临时切换到
:body作用域:如果你需要在全局作用域内执行多个操作,可以嵌套一个within(:body)块,这个块会强制使用整个页面的根容器作为查找范围,执行完后自动回到原来的some_scope作用域:within("some_scope") do find("something").click within(:body) do find("outer_thing").click # 这里可以执行更多全局操作 end # 回到some_scope继续后续操作 end
这两种方式都能保持原有代码块的连贯性,避免拆分多个within块带来的代码碎片化问题。
内容的提问来源于stack exchange,提问作者kwerle
相关产品推荐
相关产品推荐

