使用与zombieJS相关的behat来点击一个元素会产生一个DriverException

时间:2015-03-12 08:06:12

标签: behat zombie.js

我正在使用与僵尸驱动程序的behat来测试我的应用程序。现在我试图点击一个元素(td),以激发一个ajax请求。但是当点击这个元素时,我收到错误:

  

处理活动时出错'点击' (贝哈特\水貂\异常\ DriverException

我使用的代码来自this thread

在互联网上我找不到有错误信息的人,所以我不知道如何解决这个问题。

我想点击的HTML如下所示:

<td value="2" onclick="switchStatus(this.id); updateScores();; return false;" id="37_12_2">2</td>

这些javascript函数对服务器执行ajax调用,对保存的结果不执行任何操作(无成功方法)。

我使用的测试功能如下:

/**
 * @Given /^I click td "([^"]*)"$/
 */
public function iClickTd($id)
{
    $locator = "#$id";
    $element = $this->getSession()->getPage()->find('css', $locator);

    if (null === $element) {
        throw new \InvalidArgumentException(sprintf('Could not evaluate CSS selector: "%s"', $locator));
    }

    $element->click();
    $this->getSession()->wait(1000);
}

在测试中我有:

And I click td "37_12_2"

behat.yml:

default:
  suites:
    default:
      contexts:
        - FeatureContext:
          - http://localhost/
  extensions:
    Behat\MinkExtension\ServiceContainer\MinkExtension:
      base_url: http://localhost/
      sessions:
        default:
          goutte: ~
        javascript:
          zombie:
            node_modules_path: '/usr/lib/node_modules/'

二手版本:

  • &#34; phpunit / phpunit&#34;:&#34; 4.5。*&#34;,
  • &#34; phpspec / phpspec&#34;:&#34; ~2.1&#34;,
  • &#34; behat / behat&#34;:&#34; ~3.0&#34;,
  • &#34; behat / mink&#34;:&#34; ~1.6&#34;,
  • &#34; behat / mink-extension&#34;:&#34; ~2.0&#34;,
  • &#34; behat / mink-goutte-driver&#34;:&#34; *&#34;,
  • &#34; behat / mink-zombie-driver&#34;:&#34; ~1.2&#34;
  • npm v1.4.28
  • php 5.6

有谁知道出了什么问题,以及如何让这个功能发挥作用?

1 个答案:

答案 0 :(得分:1)

实际问题是错误的ajax请求。使用真正的webbroser ajax调用是正确的,但使用zombieJS这个调用转到了一个错误的URL。

当其他人有相同的异常时,您可以通过更改ZombieDriver.php中的以下部分来查看您的真实问题: 从:

$out = $this->server->evalJS($js);
    if (!empty($out)) {
        throw new DriverException(sprintf("Error while processing event '%s'", $event));
    }

要:

$out = $this->server->evalJS($js);
    if (!empty($out)) {
        echo $out;
        throw new DriverException(sprintf("Error while processing event '%s'", $event));
    }

$ out包含ajax调用的实际错误消息。