【问题标题】:Behat / Mink / Selenium: intercepting AJAX calls possible?Behat / Mink / Selenium:可以拦截 AJAX 调用吗?
【发布时间】:2013-01-08 11:39:35
【问题描述】:

我正在使用 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');
}

【问题讨论】:

    标签: selenium behat mink


    【解决方案1】:

    这里有两个很好的资源来检查 ajax 调用

    行为方式

    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 以获得您的通过/失败

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      相关资源
      最近更新 更多