【问题标题】:Issues with Drupal's autocomplete test with BehatDrupal 的 Behat 自动完成测试问题
【发布时间】:2018-02-15 17:01:45
【问题描述】:

我正在尝试测试 Drupal 生成的表单,其中有一些自动完成功能可以帮助人们做出正确的选择。

在此表单中,有 3 个字段可让用户选择 3 篇文章(“Actualités”),一旦您开始输入内容,自动完成功能会生成具有相似标题的文章列表。

这是一个例子:

问题是我在做一些测试时意识到,使用 $this->getSession()->getPage()->fillField() 会使 Behat 失去对字段的关注,就像它在完成填充字段后按下 Tab 一样。

所以我尝试了很多技巧来获得这个领域的关注,如下所示:

$field = $this->getSession()->getPage()->findField('field_mb_actualites[0][target_id]');

if($field) {

  // Solution #1
  // the dropdown menu is inside a `ul#ui-id-1` element
  $this->getSession()->executeScript("jQuery('#ui-id-1').show();");

  // Solution #2     
  $field->focus();

  // Solution #3
  // Consists of pressing "shift + tab" for a "reverse tab" and trying to get back to the field

  $this->getSession()->getDriver()->keyDown($xpath, 16);
  $this->getSession()->getDriver()->keyDown($xpath, 9);
  $this->getSession()->getDriver()->keyUp($xpath, 9);
  $this->getSession()->getDriver()->keyUp($xpath, 16);

  // And I take a screenshot at the end to see if anything worked
  file_put_contents('screenshot-focus.png', $this->getSession()->getDriver()->getScreenshot());
}

但我总是得到相同的结果,如下所示:

获得焦点后,我需要做的就是按“向右”方向箭头使下拉菜单再次可见,然后按“向下”方向箭头选择建议,然后按“Enter”确认选择。

但是,我开始没有想法了,尽管我在 Behat 的 github 上发现了一些关于这个问题的问题,但我无法让答案发挥作用。如何触发自动完成?

提前谢谢你

【问题讨论】:

  • 你想做什么?触发自动完成还是隐藏它?
  • 触发它(我会编辑我的问题以准确)
  • 你需要创建一个脚本来触发正确的事件显示自动完成并在你填写完字段后执行它,明天我可以给你写一个例子。你需要触发的事件可以找到通过检查该元素。

标签: autocomplete behat


【解决方案1】:

您可以像这样使用 JavaScript 函数来触发事件:

    public function triggerEventOn($css_selector){
        $function = <<<JS
        (function(){
        var element = document.querySelector("$css_selector");
        var event = document.createEvent('Event');
        event.initEvent('change', true, true);
        element.dispatchEvent(event);
        })()
JS;

        try{
            $this->getSession()->getDriver()->executeScript($function);
        }catch (Exception $e){

        }
    }

如果您愿意,您也可以对其进行调整以填充该字段并在之后触发事件。 要检查您需要触发的事件,您需要检查该元素并在检查器中检查 ev

【讨论】:

  • 那么我必须在填写字段之前或之后放置此代码吗?
  • 好的,我知道了,我必须做一些调整以使我的代码适应您的解决方案,它就像一个魅力,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
相关资源
最近更新 更多