Selenium IE更改事件未触发

时间:2010-12-22 10:59:23

标签: internet-explorer selenium

我有一个选择框,上面有一个事件监听器:

$(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);
      }
    });  
  });
});

在ie / ff / ...中使用它会正常工作 当使用phpunit进行selenium测试时,我可以看到selectbox被更改,但它不会触发jquery事件更改。它只发生在IE中。以下是执行命令的代码:

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-select", "label=3333");
    $this->waitForPageToLoad("30000");  
  }
  ...

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:9)

我这样解决了。它不是最佳的,但它允许你继续并测试其他东西。

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

答案 1 :(得分:2)

你可以在没有任何黑客攻击的情况下使用它,比如运行可以触发更改事件的脚本。 Selenium从您的代码生成javascript并将其注入浏览器,而不是运行它。但是,如果您通过javascript更改任何选择的选定选项,它将无法正常工作。

我已经做了一些小例子,以便了解(如果您通过手更改选定的选项'更改'事件触发,但不通过javascript。您可以查看可行的示例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>

所以我认为可以手动触发事件,如:

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

答案 2 :(得分:1)

您应首先设置焦点:

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

IE浏览器中会出现此问题

答案 3 :(得分:0)

您是否尝试过将按键事件发送到select而不是直接修改值?