Тестирование Selenium - события, похоже, не запускаются

Я использую встроенный Glassfish для развертывания моего веб-приложения и тестирования его с помощью удаленного управления Arquillian. Пока все шло хорошо, мы обнаружили проблему при попытке использовать функцию предложений в приложении. Он в основном состоит из текстового поля, которое предлагает список возможных совпадающих элементов, если набрано 3 или более символов.

    <div class="uiModuleSelectingConcepts suggestion_${cc.id}">
    <div class="searchBox">
        <fieldset>
            <input type="text" 
                   class="sample" 
                   value="${cc.attrs.input_label}"
                   placeholder="${cc.attrs.input_label}"/>
                   <i></i>
        </fieldset>
    </div>
    <a4j:outputPanel id="suggestion_component_container"
                     styleClass="suggestionsWrapper" 
                     layout="block">
        <div class="suggestionsList_${cc.id}">
        </div>
    </a4j:outputPanel>
</div>

Некоторые события добавляются, поэтому эти предложения правильно отображаются, как показано ниже (в следующем коде параметр inputNode) - это само текстовое поле, где пользователь вводит... там, где мы добавляем события):

           this.addEventHandlers = function (inputNode, suggestionCallback, params) {
           var parent = this;
           inputNode
           /*
            * keypress event.
            */
           .keypress(function(event) {
               if (event.keyCode === 13) {
                   event.preventDefault();
               }
           })
           /*
            * keyup event. 
            */
           .keyup(function(event) {
                       switch (event.keyCode) {
                       /**
                        * Up arrow.
                        */
                       case 38: 
                           event.stopPropagation();
                           event.preventDefault();
                           var suggestionsWrapper = parent._params.list;
                           var currentSelectedValue = null;
                           if (suggestionsWrapper.find(".suggestionItem").length) {
                               if (suggestionsWrapper.find(".suggestionItem:first").hasClass("focused")) {
                                   suggestionsWrapper.find(".focused").removeClass("focused");
                                   suggestionsWrapper.find(".suggestionItem:last").addClass("focused");
                                   //currentSelectedValue =  suggestionsWrapper.find(".suggestionItem:last").val();
                               } else {
                                   suggestionsWrapper.find(".focused").removeClass("focused").prev().addClass("focused");
                               };
                               //set the selected value to input.
                               //console.debug("Current Valiue", suggestionsWrapper.find(".focused"));
                               var e = suggestionsWrapper.find(".focused");
                               if (e.length > 0) {
                                   //console.debug("Current e", e);
                                   currentSelectedValue =  typeof e  === 'undefined' ? null : e.attr('data-suggest');
                                   //console.debug("Current Valiue", currentSelectedValue);
                                   if (currentSelectedValue != null) {
                                       jQuery(this).val(Encoder.htmlDecode(currentSelectedValue));
                                   }
                               }
                           }
                           parent._blur = false;
                           break;
                       /**
                        * Down arrow.
                        */    
                       case 40: 
                           var suggestionsWrapper = parent._params.list;
                           var currentSelectedValue = null;
                           if (suggestionsWrapper.find(".suggestionItem").length) {
                               if (suggestionsWrapper.find(
                                       ".suggestionItem:last").hasClass("focused")) {
                                   suggestionsWrapper.find(".focused").removeClass("focused");
                                   suggestionsWrapper.find(".suggestionItem:first").addClass("focused");
                               } else {
                                   suggestionsWrapper.find(".focused").removeClass("focused").next().addClass("focused");
                               };
                               //console.debug("Current Valiue", suggestionsWrapper.find(".focused"));
                               var e = suggestionsWrapper.find(".focused");
                               //console.debug("Current e", e);
                               if (e.length > 0) {
                                   currentSelectedValue =  typeof e  === 'undefined' ? null : e.attr('data-suggest');
                                   //console.debug("Current Valiue", currentSelectedValue);
                                   if (currentSelectedValue != null) {
                                       jQuery(this).val(Encoder.htmlDecode(currentSelectedValue));
                                   }
                               }
                           }
                           parent._blur = false;
                           break;
                       /**
                        * ENTER key
                        */
                       case 13: 
                           event.stopPropagation();
                           event.preventDefault();
                           var suggestionsWrapper = parent._params.list;
                           var oConcept = suggestionsWrapper.find(".focused");
                           if (typeof oConcept !== "undefined") {
                               oConcept.trigger("click");
                           }
                           parent._blur = true;                            
                           parent._cleanSuggestions();
                           jQuery(this).blur();
                           break;
                       /**
                        * ESC key event.
                        */    
                       case 27: 
                           event.stopPropagation();
                           event.preventDefault();
                           var sValue = jQuery(this).attr("data-default");
                           sValue = jQuery.trim(sValue);
                           if (sValue === jQuery(this).attr("data-default")) {
                               jQuery(this).addClass("sample").blur();
                           }
                           parent._blur = true;
                           parent._cleanSuggestions();
                           jQuery(this).val("");
                           jQuery(this).blur();
                           break;
                       default:
                           var suggestionsWrapper = parent._params.list;
                           //var typeRight = jQuery(this).parents(".tabContent").attr("id");
                           var sValue = jQuery.trim(jQuery(this).val());
                           //var oThisInput = jQuery(this);
                           if (sValue.length > MEDIA.configuration.SUGGESTION_LIMIT) {
                               suggestionsWrapper.find(".suggestionItem").remove();
                               global.uiDelay( function() {      
                                   parent.displayLoading();
                                   suggestionCallback(sValue, MEDIA.util.getTrueFalseValue(parent._params.retrieveOnlyClasses) ? suggestOnlyConcepts : "");
                               }, 1000);
                           } else {
                               parent.writeMore();
                           }
                           parent._blur = true;
                           break;
                       };
                   }).keydown(function(event) {
                   switch (event.keyCode) {
                       case 38: // up
                           event.stopPropagation();
                           event.preventDefault();
                           break;
                       case 40: // down
                           event.stopPropagation();
                           event.preventDefault();
                           break;
                       default:
                       break;
                   };
           }).focus(function() {
               jQuery(this).val("");
               parent._blur = true;
              // when suggestions lose focus
           }).blur(function() {
               if (parent._blur) {
                   jQuery(this).val("");
                   parent._cleanSuggestions();
               }
           });
       };

Когда приложение развернуто нормально (без целей тестирования, без селена), оно работает как положено, и при вводе чего-либо отображаются предложения. Однако при использовании Selenium, независимо от того, что напечатано в поле, ничего не происходит. Мы испробовали множество возможностей и комбинаций с.keyDown(), .keyPress(), .keyUp() с их char, keyCode и нативными вариантами. Также.type(), .typeKeys().... все безрезультатно. Казалось бы, по каким-то причинам события игнорируются (забавно то, что если мы вручную набираем текст в браузере selenium, открывающемся для тестирования приложения, то выводятся подсказки -do- display. Они этого не делают только тогда, когда это селен. печатать).

Любая помощь будет принята с благодарностью. Не уверен, что я понял, мы были бы рады уточнить.

Привет.

1 ответ

Я использовал эту простую тестовую страницу и jQuery 1.7.2 (вход в первое поле должен быть скопирован в другое):

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <script type="text/javascript" src="jquery-1.7.2.min.js"></script>
    </head>
    <body>
        <input type="text" id="myInput" />
        <input type="text" id="yourInput" />
        <script>
            $("#myInput").keyup(function(event) {
                $("#yourInput").val(this.value);
            });
        </script>
    </body>
</html>

Позвольте мне изложить досадную правду в самом начале: с WebDriver все работает хорошо и гладко.

WebDriver driver = new InternetExplorerDriver();
driver.get("the path to the file");
driver.findElement(By.id("myInput")).sendKeys("Hello.");
driver.quit();

Во всяком случае, то, что я смог заставить его работать в Selenium RC, тоже:

sele.focus("id=myInput");
sele.keyPressNative(String.valueOf(KeyEvent.VK_H));
sele.keyPressNative(String.valueOf(KeyEvent.VK_E));
sele.keyPressNative(String.valueOf(KeyEvent.VK_L));
sele.keyPressNative(String.valueOf(KeyEvent.VK_L));
sele.keyPressNative(String.valueOf(KeyEvent.VK_O));

Это отчасти отстой, но это лучшее, что я придумал, где работает событие.

Другие вопросы по тегам