2

我正在使用嵌入式 glassfish 来部署我的 Web 应用程序并使用 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- 显示。只有当它是 selenium 时它们才不会打字)。

任何帮助将不胜感激。不确定我是否完全有道理,我们很乐意澄清。

问候。

4

1 回答 1

0

我使用了这个简单的测试页和 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));

这有点糟糕,但这是我想出的最好的活动地点。

于 2012-07-01T10:10:09.450 回答