开发者

Selenium IE change event not fired

I have a select box which has an event listener on it:

$(document).ready(function () {
    $('#edit-era-code-select').change(function() {
      $.ajax({ 
        url: Drupal.settings.basePath+'era/js', 
        type: 'POST',
        data: "era_code_select="+$(this).val(),
        context: document.body, 
        success: function(){
        window.location.reload(true);
      }
    });  
  });
});

It will works fine when using it in ie/ff/... When doing selenium tests using phpunit it I can see the selectbox being changed but it does not trigger the jquery event change. It only happens in IE. Here is the code that does the command:

AbstractSeleniumTestCaseIexplore::loginShib ( $user ['uid'] );
  $this->waitForElementPresent("//select[@id='edit-era-code-select']", 30000);
  $code = $this->getSelectedLabel("//select[@id='edit-era-code-select']");
  if ($code != 3333) {
    $this->select("edit-era-code-s开发者_Python百科elect", "label=3333");
    $this->waitForPageToLoad("30000");  
  }
  ...

Can anyone help?


I solved it like this. Its not optimal but it allows you to continue and test other things.

$this->runScript("$('#edit-era-code-select').change()");


You can get it work without some hacks, like run script that fire change event. Selenium generate javascript from your code and inject it in browser, than run it. But if you change selected option of any select via javascript it never work.

I've done small example in order to understand that(if you change selected option by hands 'change' event fire, but via javascript not. You can check workable example here):

<select  id="someTxt">
    <option value="1">Option1</option>
    <option value="2">Option2</option>
    <option value="3">Option3</option>
</select>
<div id="button">Change selected option via javascript</div>

<script type="text/javascript">
    $(document).ready(function(){
     $('#someTxt').change(function() {
        alert($("#someTxt option:selected").text());
      });
    $("#button").bind("click", function(){
      $("#someTxt option[value='3']").attr('selected', 'selected');
    });
    });
 </script>

So i think this is okay to fire event manually like:

$this->runScript("$('#edit-era-code-select').change()");


You should set the focus first:

runScript("document.getElementById('selectboxID').focus())

This problem will happen in IE browser


Have you tried sending keypress events to the select instead of directly modifying the value?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜