web-dev-qa-db-ja.com

Internet ExplorerでのfindIndex()メソッドの問題

Selenium::Remote::Driver モジュールを使用して、異なるブラウザでいくつかのテストを行っています。

Webサイトのリスト、フレームワーク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では動作しません。これは、findIndexメソッドがバージョン12以降でのみサポートされているためです。何らかの理由でバージョン11を使用する必要があります.

すべてのブラウザからインデックスを取得するにはどうすればいいですか?

20
Chaoui05

だから私の質問は、どのようにブラウザごとにインデックスを取得するためにどうすればいいですか?

少なくとも3つのオプションがあります。

  1. シムArray#findIndex; [〜#〜] mdn [〜#〜] には、使用できるシム/ポリフィルがあります。

  2. IE11が持っている何か他のものを使用してください Array#some (IE9にもあります):

    var index = -1;
    items.some(function(el, i) {
        if (el.name == paramProgramName) {
            index = i;
            return true;
        }
    });
    
  3. forなど、IE8でも持っているものを使用します。

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

http://underscorejs.org/ を使用できます。

使い方:

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