Behat / Mink / Selenium:拦截AJAX调用可能吗?

时间:2012-12-17 17:51:36

标签: selenium behat mink

我正在使用Behat / Mink和Selenium进行验收测试。我需要确定我的网页是否通过Ajax对服务器进行了错误的调用。问题是,服务器将尝试“纠正”格式错误的代码并返回有效数据。

有没有办法“拦截”并验证从我的网站发出的ajax调用?

现在我的FeatureContext类看起来像:

public function performAnAction()
{
  $this->enterInField('test', 'field');
  $this->hitOKButton();
  $this->assertResponseContains('success');
}

我想做点什么:

public function performAnAction()
{
  $this->enterInField('test', 'field');
  $this->hitOKButton();
  $ajax = $this->getAllAjaxCalls();
  foreach ($ajax as $call) {
    // perform some validation
  }
  $this->assertResponseContains('success');
}

1 个答案:

答案 0 :(得分:1)

以下是对ajax调用进行检查的两个很好的资源

behat mink方式

http://docs.behat.org/cookbook/behat_and_mink.html#defining-our-own-featurecontext

这是一个简洁的解决方案,使用_before和_after覆盖来深入了解基本功能并且非常有趣,但阅读它将有助于您更好地理解框架在幕后的实际操作

http://blog.scur.pl/2012/06/ajax-callback-support-behat-mink/

我认为你可以简单地使用带有js回调的内置等待函数,通过将你的响应放到任何html元素上的jquery data []对象中来获得你想要的自定义步骤def,并验证你的预期输出

$this->getSession()->wait(5000,
        "$('.someCssClassSelectorToElementWithResponseStuff').length > 0"
    );

如果你的元素是一个可以工作的js对象 或者,如果它作为jquery对象返回,则可以使用.size()而不是length 只需确保你注入的js评估为true为false以获得通过/失败