title: Angularjs E2E Testing with Angular-UI Select2 Element
body: <p>I have a partial with a select2 element utilizing Angular UI <a href="http://angular-ui.github.io/" rel="nofollow noreferrer">http://angular-ui.github.io/</a></p>
  
  <p>The issue I am running into is that the element is required and although i have successfully set the field through the following code, the required attribute is not removed as Angular's model must not be updating due to the outside change and I am not sure how to either provide a $scope.apply() or utilize another function of Angular to continue the test.</p>
  
  <p>First to allow for direct jQuery functions to run: (taken from <a href="https://stackoverflow.com/questions/16400720/how-to-execute-jquery-from-angular-e2e-test-scope">How to execute jQuery from Angular e2e test scope?</a>)</p>
  
  <pre><code>angular.scenario.dsl('jQueryFunction', function() {
  return function(selector, functionName /*, args */) {
      var args = Array.prototype.slice.call(arguments, 2);
      return this.addFutureAction(functionName, function($window, $document, done) {
          var $ = $window.$; // jQuery inside the iframe
          var elem = $(selector);
          if (!elem.length) {
              return done('Selector ' + selector + ' did not match any elements.');
          }
          done(null, elem[functionName].apply(elem, args));
      });
  };
  });
  </code></pre>
  
  <p>Then to change the field value:</p>
  
  <pre><code>jQueryFunction('#s2id_autogen1', 'select2', 'open');
      jQueryFunction('#s2id_autogen1', 'select2', "val", "US");
      jQueryFunction('#s2id_autogen1', 'select2', 'data', {id: "US", text: "United States"});
      jQueryFunction('.select2-results li:eq(3)', 'click');
      jQueryFunction('#s2id_autogen1', 'trigger', 'change');
      jQueryFunction('#s2id_autogen1', 'select2', 'close');
      input('request._countrySelection').enter('US');
  </code></pre>
  
  <p>Note that not all of those functions are needed to reflect the changes to the ui, merely all that I have utilized to try and get this working...</p>