用behat和phantomjs执行javascript

时间:2013-12-16 10:33:56

标签: jquery phantomjs behat

我正在开发一个支持javascript的功能测试解决方案。

当然,使用Symfony Framework,我选择Behat和Sahi驱动程序,我的测试套件是绿色的。问题是sahi很慢,而且不够稳定,这就是我转向PhantomJs的原因,正如这篇博文提到的: - > http://shashikantjagtap.net/running-behat-scenarios-with-pahntomjs/

我的一些测试保持绿色,但是当我使用$this->getSession()->getDriver()->evaluateScript()时,没有返回,我无法评估javascript。

如果有人处理并找到解决方案......

++

3 个答案:

答案 0 :(得分:2)

你还没有解决问题?试试吧:

$this->getSession()->getDriver()->evaluateScript(
    "function(){ return 'some expression'; }()"
);

答案 1 :(得分:1)

在您的方法中,您可以使用:

$result = $this->getSession()->evaluateScript("$('input').val();");
var_dump($result);

在我的用例中,将返回代码中第一个输入标记的值。 如您所见,如果您在页面中使用了jQuery,则可以使用它。

"场景"必须使用标记@javascript

运行

答案 2 :(得分:0)

我试图使用内置的步骤定义fillField()填充Drupal文本字段(即"我填写" textfield"使用"我的值")和在值中,我有一个左括号的开括号。然后我决定编写一个自定义函数来以编程方式附加值,如下所示:

$element = $session->getPage()->find(
        'xpath',
        $session->getSelectorsHandler()->selectorToXpath('css',     $cssSelector) // just changed xpath to css
    );
    if (null === $element) {
        throw new \InvalidArgumentException(sprintf('Could not evaluate CSS Selector: "%s"', $cssSelector));
    }

    $element->focus();
    $element->setValue("(2090)");

但是这也有同样的问题(开头括号会脱掉并将值保留为" 2090)"

最后,我设法使用你的jquery例子让它工作:

$this->getSession()->evaluateScript("jQuery('#edit-og-group-ref-und-0-default').val("(2090)");"); 

瞧它确实奏效了。谢谢。