我正在使用Selenium::Remote::Driver
模块对不同的浏览器进行一些测试。
我想检查一下我的网站列表中是否有一些项目,从框架JavaScript(创建网格)列表。对于这种情况,我必须使用Selenium::Remote::Driver
允许的JavaScript代码段。
我写了以下代码
$script = q{
var paramProgramName = arguments[0];
var list = $('#c-list').dxList('instance');
var items = list.option('items');
var index = items.findIndex(function(el){ return el.name == paramProgramName; });
list.selectItem(index);
return ;
};
$driver->execute_script($script, $programName);
适用于Chrome和Firefox,但不适用于Internet Explorer,因为版本12及以下版本仅支持findIndex
方法。出于某种原因,我必须使用版本11.
我可以通过不同方式从每个浏览器获取索引吗?
答案 0 :(得分:57)
所以我的问题是我怎么能以不同的方式获取每个浏览器的索引?
您至少有三个选择:
Shim Array#findIndex
; MDN有一个可以使用的垫片/填充物。
使用IE11具有的其他内容,例如Array#some
(即使是IE9):
var index = -1;
items.some(function(el, i) {
if (el.name == paramProgramName) {
index = i;
return true;
}
});
使用IE8所具有的其他内容,例如for
:
var index = -1;
for (var i = 0; i < items.length; ++i) {
if (items[i].name == paramProgramName) {
index = i;
break;
}
}
答案 1 :(得分:0)
您可以使用http://underscorejs.org/,
使用方法:
var index = _.findIndex(objects, function(item){
return item.name == programName;
});
答案 2 :(得分:-2)
而不是:
const index = items.findIndex(el => el.name == paramProgramName);
你可以在两个IE9操作中实现相同的结果:
const index = items.indexOf(
items.filter(el => el.name == paramProgramName)[0]
);
答案 3 :(得分:-2)
另一种方式:
var objects = [
{ 'key' : 1, 'name' : 'ABC' },
{ 'key' : 2, 'name' : 'QLP' },
{ 'key' : 3, 'name' : 'XYZ' },
];
function filterByKey(obj) {
if ('key' in obj) {
return obj.key === 'some_value';
}
}
var index = objects.indexOf(
objects.filter(filterByKey)[0]
);
答案 4 :(得分:-3)
更好的方法:
var findArrayIndex = function (array, predicateFunction) {
var length = array == null ? 0 : array.length;
if (!length) {
return -1;
}
var index = -1;
for (var i = 0; i < array.length; ++i) {
if(predicateFunction(array[i])) {
index = i;
break;
}
}
return index;
}
用法:
findArrayIndex(cachedAnnouncementsArray, function(o){return o.ID == 17;});