测试文本是否包含任何HTML

时间:2013-03-21 12:21:38

标签: capybara

我想测试某些内容是否包含任何HTML。这样做的简单而干净的方法是什么?

page.find(".description").should_not have_content /\<.*\>/

无效,因为&lt;strong&gt;Lorem失败但传递<strong>Lorem。可能是由于资本化的方式帮助其用户逃避HTML。

使用xpath解决问题,但让我想知道是否有更简单的解决方案。

page.should_not have_selector(:xpath, "//div[@class="description"]/*")

是否有内置的方法可以检测到一些文本在Capybara中被剥夺了HTML?

1 个答案:

答案 0 :(得分:0)

Capybara的has_content?(以及have_content)方法旨在检查呈现给用户的文本,而不是您期望的元素的html源文本。

因此,我认为Capybara的行为是正确的:

  • 如果.description的html来源为&lt;strong&gt;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 =~ /\<.*\>/