Selenium WD не срабатывает click() по кнопке

Доброго времени суток!

Есть вот такой узел:

<div class="">
    <a id="save" class="" data-fire="saved" data-action="save" href="//" data-type="route" data-ismodule="true">
        <span>Сохранить</span>
    </a>
    <a id="cancel" class="" data-action="cancel" href="//" data-type="route" data-ismodule="true">
</div>

Нужно кликнуть на “Сохранить”.
Элемент успешно находится по xpath (проверенно в firepath):

  1. //*[@id=‘save’]/span
  2. //*[contains(text(), ‘Сохранить’)]
  3. Чисто по id

Проблема в том, что клик не срабатывает. Пробовал команды:

  1. element.click()
  2. driver.execute_script(‘arguments[0].click()’, self.element)
  3. action_chains.move_to_element(self.element).click().perform()

Вот как ведет себя указанный элемент во всех случаях:

  1. Фокус перемещается на нужную кнопку, и ничего больше
  2. Одно из заполненных полей (обязательное) краснеет
  3. Одно из обязательных полей (заполненное) краснеет, и тут же белеет.

При этом, если открыть эту страницу и в firebug выполнить:
document.getElementById(‘save’).click()
Все отработает как надо.

Подскажите, пожалуйста, как дебажить такую ситуацию? Искать баг возможно в Selenium WD?
Использую python3.4.3 и свежащий selenium (sudo pip3 install -U selenium сделал).

Спасибо за помощь!

Попробуйте сначала навести указатель на кнопку, чуток подождать, а потом кликнуть.
поздно заметил что есть 3 пункт, но может всё-таки подождать секунду хотябы, просто для проверки…

Я бы согласился, но согласно выше сказанному:

Попробовал вот так:

self.action_chains.move_to_element(self.element).perform()
time.sleep(5)
self.action_chains.click().perform()

не сработало.

Если есть спешка, выполни через executeScript “document.getElementById(‘save’).click()”, а потом разберешься, советую в FF через фаербаг посмотреть на ком висит скрипт события onclick.

1 лайк

Время есть. Сам не догадался посмотреть на ком висит событие, сейчас посмотрим. Может клик происходит, но не на том элементе.

Нет, с событиями порядок.

driver.execute_script("document.getElementById('save').click();")

и не парься раз это работает :wink: