1

我想知道如何检查 HTML 文档的头部是否存在带有黄瓜的特定字符串。实际上我对特定的机器人指令感兴趣,所以我在第一步启动浏览器(atm Firefox)并打开一个本地站点。

在第二步中,我检查整个 html 代码中的字符串:

@b.html.include?('<meta name="robots" content="noindex, follow">').should == true

并看到我的场景在第二步失败。(预期为真,结果为假)令人惊讶的是,对部分字符串的检查成功了:

@b.html.include?('name="robots"').should == true

但是一旦我检查

@b.html.include?('<meta name="robots"').should == true

要不就

@b.html.include?('a name="robots"').should == true

我又弄错了。

所以,我认为空格的存在会导致这种行为。快速检查,只有一个额外的空格

@b.html.include?(' name="robots"').should == true

并且测试场景是绿色的。

在文档正文中搜索整个句子

@b.html.include?('<h1>Yarr, that "is" supeb!</h1>').should == true

也是路过。

我还尝试将 h1 标题移动到文档的头部(测试仍然通过)并将元标记移动到正文(测试仍然失败)

我正在使用 cucumber 1.2.0 和 ruby​​ 1.9.3p0 以及通过 watir-webdriver 驱动的 Firefox,并且想知道我是否做错了什么。实际上,我只有一个带有这个简单步骤的功能和一个带有元数据和这个“Yarr”句子的最小 html 站点。没有导轨,没有耙子。OS X 10.7 请告诉我是否应该提供更多信息……我正在修补这些东西几个小时。

Edit1:添加了我检查的站点的 HTML。

<!DOCTYPE html>
<html>
<head>
    <title>Home</title>
    <meta charset="utf-8">
    <link rel="stylesheet" media="screen" href="/public/stylesheets/main.css">
    <link rel="shortcut icon" type="image/png" href="/public/images/favicon.png">
    <script src="/public/javascripts/jquery-1.6.4.min.js" type="text/javascript" charset="utf-8"></script>
    <link rel="canonical" href="google.de">
    <meta name="robots" content="noindex, follow">
  </head>
<body>
    <h1>Yarr, that "ist" superb!</h1>
</body>
</html>
4

1 回答 1

2

问题:

似乎 HTML 标记的属性并不总是按照它们编写的顺序排列。看到这个:

puts @b.html
#=> <!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml"><head>
    <title>Home</title>
    <meta charset="utf-8" />
    <link href="/public/stylesheets/main.css" media="screen" rel="stylesheet" />
    <link href="/public/images/favicon.png" type="image/png" rel="shortcut icon" />
    <script charset="utf-8" type="text/javascript" src="/public/javascripts/jquery-1.6.4.min.js"></script>
    <link href="google.de" rel="canonical" />
    <meta content="noindex, follow" name="robots" />
  </head>
<body>
    <h1>Yarr, that "ist" superb!</h1>

</body></html>

请注意,这<meta content="noindex, follow" name="robots" />与您的 HTML 文件的顺序不同。这解释了为什么您的测试给出了它们的结果。

建议解决方案:

假设您只关心特定的元标记出现在标题中(而不是标记的特定顺序),我建议使用:

b.head.meta(:name => 'robots', :content => 'noindex, follow').exists?.should == true
于 2012-05-31T20:58:08.657 回答