Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

xpath
locators
python
webdriver
Теги: #<Tag:0x00007f7b6592bdb8> #<Tag:0x00007f7b6592bc00> #<Tag:0x00007f7b6592ba70> #<Tag:0x00007f7b6592b750>

(Aikrasnov) #1

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

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

<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 сделал).

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


(Vasiliy Rakshin) #2

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


(Ray Romanov) #3

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


(Aikrasnov) #4

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

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

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


(Ray Romanov) #5

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


(Aikrasnov) #6

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


(Aikrasnov) #7

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


(Ray Romanov) #8
driver.execute_script("document.getElementById('save').click();")

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