量角器 - 根据条件识别嵌套下拉元素时超时
Protractor- Timeout while Identifying a nested dropdown element based on a condition
我正在尝试在我的应用程序中识别并选择具有以下结构的大量嵌套下拉列表(不完全是):
<tr>..</tr>
<tr>
<td>...</td>
<td>
<grid-field field-name="abc">
<span>
<span>
<span>
<select>
<option value="xyz">Some option</option>
</select>
</span>
</span>
</span>
</grid-field>
</td>
<td>
<grid-field field-name="environment">
<span>
<span>
<span>
<select>
<option value="xyz">Some option</option> /// Required Dropdown
</select>
</span>
</span>
</span>
</grid-field>
</td>
<td>
<grid-field field-name="adasd">
<span>
<span>
<span>
<select>
<option value="xyz">Some option</option>
</select>
</span>
</span>
</span>
</grid-field>
</td>
</tr>
<tr>..</tr>
我已经编写了以下帮助程序函数来选择下拉列表,但出现超时错误。
this.selectValueFromDropDown = function(columnName,dropDownData){
this.getDropDown(columnName).$("[value='".concat(dropDownData).concat("']")).click();
};
this.getDropDown = function(columnName){
return element.all(by.tagName('tr')).filter(function(row){
return row.all(by.tagName('grid-field')).each(function(gridField){
gridField.getAttribute('field-name').then(function(attribute){
return attribute === columnName;
});
});
}).first().element(by.tagName('select'));
};
// Spec
gridObject.selectValueFromDropDown('environment','xyz');
错误信息
> Message:
> Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL. Stack:
> Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
> at [object Object]._onTimeout (C:'Users'taaupsa1'AppData'Roaming'npm'node_modules'protractor'node_modules'jasmine-core'lib'jasmine-core'jasmine.js:1812:23)
谁能告诉我我做错了什么?谢谢
知道了,这是一个理论。您缺少each()
调用中的return
,使其"永远"执行并超过默认的 Jasmine 规范超时:
this.getDropDown = function(columnName){
return element.all(by.tagName('tr')).filter(function(row){
return row.all(by.tagName('plm-grid-field')).each(function(gridField){
// v HERE
return gridField.getAttribute('field-name').then(function(attribute){
return attribute === columnName;
});
});
}).first().element(by.tagName('select'));
};
而且,我也认为你的意思是使用filter()
而不是each()
..
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 量角器 - 根据条件识别嵌套下拉元素时超时
- 超时后无法删除新添加的 HTML 元素
- 使用超时逐步将字符串从数组添加到 html 元素
- 量角器根据条件单击嵌套元素,错误 - 在指定的超时内未调用异步回调
- jQuery为每个元素分配带有超时的事件处理程序
- 在超时时从数组中移除元素
- 如何使用 Clippy.js 在单击时隐藏元素而不是超时
- 为每个选定元素设置不同的超时
- 量角器在获取元素文本时超时
- 向多个元素添加输入超时
- 显示隐藏的HTML元素,点击超时