简体   繁体   English

Internet Explorer的findIndex()方法问题

[英]findIndex() method issue with internet explorer

I am doing some tests with differents browsers using the Selenium::Remote::Driver module. 我正在使用Selenium::Remote::Driver模块在不同的浏览器上进行一些测试。

I would like to check if I find some item in my web site list, list from a framework JavaScript (which creates grids). 我想检查是否在我的网站列表中找到了某个项目,该列表来自框架JavaScript(创建网格)。 For this case I have to use JavaScript snippet allowed by Selenium::Remote::Driver . 对于这种情况,我必须使用Selenium::Remote::Driver允许的JavaScript代码段。

I wrote the following code 我写了下面的代码

$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);

It works fine with Chrome and Firefox but not with Internet Explorer because the findIndex method is only supported by version 12 and following. 它仅适用于Chrome和Firefox,但不适用于Internet Explorer,因为findIndex方法仅受版本12及更高版本支持。 For some reason I have to use version 11. 由于某些原因,我必须使用版本11。

What can I do differently to get an index from every browser? 要从每个浏览器获取索引,我可以做些什么?

So my question is how can i do differently to get my index for every browser ? 所以我的问题是,如何才能为每个浏览器获取索引?

You have at least three options: 您至少有三个选择:

  1. Shim Array#findIndex ; Shim Array#findIndex ; MDN has a shim/polyfill you can use. MDN具有您可以使用的填充/填充。

  2. Use something else that IE11 has, such as Array#some (which even IE9 has): 使用IE11具有的其他功能,例如Array#some (甚至IE9也具有):

     var index = -1; items.some(function(el, i) { if (el.name == paramProgramName) { index = i; return true; } }); 
  3. Use something else that even IE8 has, such as for : 使用别的东西,即使IE8有,如for

     var index = -1; for (var i = 0; i < items.length; ++i) { if (items[i].name == paramProgramName) { index = i; break; } } 

you can use http://underscorejs.org/ , 您可以使用http://underscorejs.org/

how to use: 如何使用:

var index = _.findIndex(objects, function(item){
return item.name == programName;
});

A better way: 更好的方法:

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;
}

Usage: 用法:

findArrayIndex(cachedAnnouncementsArray, function(o){return o.ID == 17;}); 

Another way: 其他方式:

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]
);

Instead of: 代替:

const index = items.findIndex(el => el.name == paramProgramName);

You can achieve the same result in two IE9 operations like so: 您可以通过两个IE9操作获得相同的结果,如下所示:

const index = items.indexOf(
    items.filter(el => el.name == paramProgramName)[0]
);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM