0

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

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

不能正常工作,因为它失败&lt;strong&gt;Lorem但继续传递<strong>Lorem。可能是由于 capybara 帮助其用户转义 HTML 的方式。

用 xpaths 解决是可行的,但让我想知道是否没有更简单的解决方案。

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

是否有一种内置的方法来检测 Capybara 中的某些文本是否已从 HTML 中删除?

4

1 回答 1

0

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

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

  • 如果 html 源.description&lt;strong&gt;Lorem,用户会看到<strong>Lorem. Capybara 搜索此文本/\<.*\>/并找到它。
  • 如果 html 源.description<strong>Lorem,用户会看到Lorem. Capybara 搜索此文本/\<.*\>/并没有找到它。

如果要检查元素的源 html,可以使用 javascript 的函数innerHTML

source_text = page.evaluate_script("document.querySelector('.description').innerHTML")
source_text.should_not =~ /\<.*\>/
于 2013-03-21T21:54:56.150 回答