【问题标题】:Behat/Mink: how can I evaluate a xml responseBehat/Mink:我如何评估 xml 响应
【发布时间】:2013-08-04 17:28:49
【问题描述】:

我正在尝试通过 Behat/Mink 测试 RSS 提要。不幸的是,我一直收到一条错误消息:

当前节点列表为空。

有谁知道如何通过 Behat/Mink 测试 XML 响应(在 xml 中搜索字符串)?

编辑

我需要找到一些方法,最好是让它与 Behat/Mink 一起运行。 但如果那根本不可能,我也可以接受一种解决方法。 一个关于如何做到这一点的例子会很棒!

【问题讨论】:

    标签: testing symfony bdd behat


    【解决方案1】:

    在您的 FeatureContext.php 文件中,您可以通过

    获取原始内容
    $xml = $this->getSession()->getDriver()->getContent();
    

    然后就可以使用Regex/DomDocument来测试返回的xml内容了。

    【讨论】:

    • 上面的这个调用目前给我抛出了以下错误:“找不到与 xpath 匹配的标签”//html。(Behat\Mink\Exception\ElementNotFoundException)” 深入挖掘。如果我解决它会更新。
    • 下面提到file_get_contents()的答案为我解决了这个问题。假设上一步已将您发送到 XML 路径,您可以像这样获取:$xml = file_get_contents($this->getSession()->getCurrentUrl()); getCurrentUrl() 将返回完整的 URL,即使上一步将您定向到路径没有域名。
    【解决方案2】:

    Mink 是一个浏览器仿真抽象层。有些浏览器可以阅读 RSS,有些则不能。解析自定义 XML 不是 Mink 的责任。为此使用 Behat + Web 爬虫 + DomDocument(或任何 PHP RSS 解析器)的组合。

    【讨论】:

    • 感谢您的提示!您能否描述一下我如何将此功能添加到我的功能上下文(在我的情况下扩展了 MinkContext)?我说的不是如何解析xml,而是如何检索http响应的内容。我在我的上下文中只有 session::getPage,这对我没有帮助......
    • @stoefln 使用任何 http 客户端甚至 file_get_contents() 来获取 rss 提要。
    • @JakubZalas 啊好的,刚刚发现我可以在上下文中使用 $this->getSession()->getCurrentUrl() 获取当前 url。这可以工作......如果你想创建一个答案,我可以给你赏金......
    【解决方案3】:

    正如@everzet 所提到的,Mink 并不是最适合这项工作的工具,因为它是一个浏览器模拟器,而不是一个 http 客户端。

    不过,您不仅限于 Mink,还可以使用任何 PHP http 客户端(如 guzzlebuzz)甚至 file_get_contents() 来获取 rss 提要。

    【讨论】:

    • 这对我来说是最简单的解决方法。如果它有帮助,getCurrentUrl() 调用在这里很有用,如果它已经在前面的步骤中设置了。 $xml = file_get_contents($this->getSession()->getCurrentUrl());
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 2014-09-22
    相关资源
    最近更新 更多