我想测试某些内容是否包含任何HTML。这样做的简单而干净的方法是什么?
page.find(".description").should_not have_content /\<.*\>/
无效,因为<strong>Lorem
失败但传递<strong>Lorem
。可能是由于资本化的方式帮助其用户逃避HTML。
使用xpath解决问题,但让我想知道是否有更简单的解决方案。
page.should_not have_selector(:xpath, "//div[@class="description"]/*")
是否有内置的方法可以检测到一些文本在Capybara中被剥夺了HTML?
答案 0 :(得分:0)
Capybara的has_content?
(以及have_content
)方法旨在检查呈现给用户的文本,而不是您期望的元素的html源文本。
因此,我认为Capybara的行为是正确的:
.description
的html来源为<strong>Lorem
,则用户会看到<strong>Lorem
。 Capybara在此文本中搜索/\<.*\>/
并找到它。.description
的html来源为<strong>Lorem
,则用户会看到Lorem
。 Capybara在此文本中搜索/\<.*\>/
并找不到它。如果要检查元素的源html,请can use javascript's function innerHTML
:
source_text = page.evaluate_script("document.querySelector('.description').innerHTML")
source_text.should_not =~ /\<.*\>/