以下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.
我尝试了以下内容:
And
更新为And I fill in "Search:" with "course"
When I wait for "Search:" to appear
的变体(60秒内超时)When I wait for "[type='search']"
的变体(60秒内超时)此方案打开了Firefox,我可以看到标签&#34;搜索:&#34;和搜索框。
我需要做些什么才能让这个测试通过?
答案 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层次结构,则需要一次切换一个级别。