获取Behat测试以查找"搜索"由jQuery datatables插件注入页面的输入

时间:2017-08-23 17:25:48

标签: behat mink

以下HTML由jQuery Datatables plugin

插入到页面中
<label>Search:
  <input type="search" class="" placeholder="" aria-controls="datatable-1">
</label>

我现有的Behat测试,不会通过:

Given I am on "/courses"
And I fill in "Search" with "course"

产生的错误是:

Form field with id|name|label|value|placeholder "Search" not found.

我尝试了以下内容:

  1. And更新为And I fill in "Search:" with "course"
  2. 添加等待When I wait for "Search:" to appear的变体(60秒内超时)
  3. 添加等待When I wait for "[type='search']"的变体(60秒内超时)
  4. 此方案打开了Firefox,我可以看到标签&#34;搜索:&#34;和搜索框。

    我需要做些什么才能让这个测试通过?

1 个答案:

答案 0 :(得分:0)

Behat的I fill in "field" with "value"命令非常慢,我倾向于不使用它。

在这种情况下,由于标签文本周围的空白,标签匹配可能无法正常工作。它期待精确的文本匹配,但额外的空格会将其丢弃。

您可以避免使用此功能,如下所示:

$this->getSession()->getPage()->find('css', 'input[type=search]')->setValue('course');

如果页面加载时元素不可用,则需要等待它。我注意到你提到等待标签文本超时,所以你应该检查你感兴趣的元素是否在iframe中。在这种情况下,您需要使用switchToIFrame命令,然后selenium才能与iframe中的元素进行交互。

例如:

//Switch to iframe with id 'iframeID'
$this->getSession()->switchToIFrame('iframeID');

//Do some stuff with the elements contained in the iframe.

//Switch back to parent iframe.
$this->getSession()->switchToIFrame(null);

还有一点需要注意的是,如果存在iframe层次结构,则需要一次切换一个级别。