Событие изменения Selenium IE не сработало - PullRequest
5 голосов
/ 22 декабря 2010

У меня есть поле выбора, в котором есть прослушиватель событий:

$(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, я вижу, что поле выбора изменяется, но оно не вызывает изменение события 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 ]

9 голосов
/ 17 января 2011

Я решил это так.Это не оптимально, но позволяет продолжать и тестировать другие вещи.

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

2 голосов
/ 19 января 2011

Вы можете заставить его работать без каких-либо хаков, например, запустить скрипт, который запускает событие изменения. Selenium генерирует JavaScript из вашего кода и вставляет его в браузер, а затем запускает его. Но если вы измените выбранную опцию любого выбора через JavaScript, это никогда не сработает.

Я сделал небольшой пример, чтобы понять это (если вы измените выбранную опцию с помощью события «изменить» руками, но не через javascript. Вы можете проверить работоспособный пример здесь ):

<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()");
1 голос
/ 29 ноября 2011

Сначала вы должны установить фокус:

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

Эта проблема будет происходить в браузере IE

0 голосов
/ 13 января 2011

Вы пробовали отправлять события нажатия клавиш на выбор вместо прямой модификации значения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...