硒测试 - 事件似乎没有被解雇

时间:2012-06-26 14:10:24

标签: javascript events selenium glassfish selenium-rc

我使用嵌入式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和native变种的许多可能性和组合。此外,.type(),. typeKeys()....所有这些都无济于事。由于某些原因,事件似乎被忽略了(有趣的是,如果我们在浏览器中手动输入一些文本来打开selenium来测试应用程序,建议 - 显示。他们只是不在它的硒做了打字)。

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

问候。

1 个答案:

答案 0 :(得分: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));

这有点糟透了,但这是我提出的事件最好的地方。