Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Autocomplete Drupal的问题&x27;带Behat的s自动完成测试_Autocomplete_Behat - Fatal编程技术网

Autocomplete Drupal的问题&x27;带Behat的s自动完成测试

Autocomplete Drupal的问题&x27;带Behat的s自动完成测试,autocomplete,behat,Autocomplete,Behat,我正在测试Drupal生成的一个表单,其中有一些自动完成功能来帮助人们做出正确的选择 在此表单中,有3个字段允许用户选择3篇文章(“实现”),一旦您开始键入内容,自动完成将生成具有类似标题的文章列表 以下是一个例子: 问题是,我在做一些测试时意识到,使用$this->getSession()->getPage()->fillField()会使Behat在字段上失去焦点,就像填充字段后按Tab键一样 所以我尝试了很多技巧来获得这个领域的关注,比如: $field = $this->getS

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

在此表单中,有3个字段允许用户选择3篇文章(“实现”),一旦您开始键入内容,自动完成将生成具有类似标题的文章列表

以下是一个例子:

问题是,我在做一些测试时意识到,使用
$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());
}
但我总是得到同样的结果,那就是:

$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());
}

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

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


提前感谢

您可以使用JavaScript函数触发如下事件:

公共函数triggerEventOn($css\u选择器){
$function=executeScript($function);
}捕获(例外$e){
}

}
您想做什么?触发自动完成或隐藏它?触发它(我将编辑我的问题以精确说明这一点)您需要创建一个脚本来触发显示自动完成的正确事件,并在填充字段后执行它,明天我可以给你写一个例子。你需要触发的事件可以通过该元素上的inspect找到。那么我必须在填充字段之前或之后放置此代码吗?好的,我知道了,我必须做一些调整以使我的代码适应你的解决方案,它工作得很好,谢谢!