Capybara 2.10.1中have_content.twice触发歧义匹配错误的解决方法
解决Capybara::Ambiguous错误的办法
问题根源
have_content("Sign in").twice 的逻辑是查找包含两次"Sign in"文本的元素,但页面里的<html>标签本身包含整个页面内容,自然会匹配这个条件;如果还有其他容器(比如某个区块)也包含两次该文本,就会触发歧义错误,Capybara无法确定你要验证的是哪个元素。
可行解决办法
缩小查找范围:不要直接在全局
page上验证,定位到你实际关注的区域(比如Bootstrap导航栏)。假设导航栏的CSS类是navbar,可以这样写:expect(page.find('.navbar')).to have_content("Sign in").twice这样只会在导航栏范围内查找,避免匹配到
<html>这类全局元素。直接统计元素数量:如果目标是验证页面上有两个"Sign in"链接,直接用
all方法统计符合条件的元素数量更精准:expect(page.all('a', text: "Sign in")).to have(2).items要是想限定在导航栏内,就加上容器选择器:
expect(page.all('.navbar a', text: "Sign in")).to have(2).items排查页面重复内容:先确认页面里是否真的存在两处"Sign in"——比如导航栏和页脚、侧边栏都有该文本。如果是不必要的重复,先清理页面内容,再调整测试逻辑。
内容的提问来源于stack exchange,提问作者daveasdf
相关产品推荐
相关产品推荐

