【发布时间】: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