2016-04-02 3 views
0

Предполагая, что есть страница с кнопками, которые имеют OnClick события вида:Trigger OnClick события на несвежем/nonexistant elment

<a onclick="doSomething($id)"></a> 

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

Возможно ли инициировать событие onclick в Selenium без получения webelement и click() или изменить идентификатор события onclick существующего веб-элемента?

Edit: Наиболее перспективным на данный момент является использование JavaScript:

wd.execute_script("document.getElementById('what').onclick = function() { dosmth($id); };") 

Но это не меняет идентификатор заметно в хром элемента инспектора, а также связь не делает ничего больше. У меня есть ошибка в синтаксисе js? Кроме того, когда я вручную изменяю идентификатор в инспекторе элементов chrome, он работает нормально.

Это сделал трюк для меня:

self.execute_script("document.getElementById('what').setAttribute('onclick', 'dosmth($id)');") 

ответ

0

Если вы знаете id этого элемента, вы можете wait для элемента с "doSomething(known_id)onclick значением атрибута быть интерактивными:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

known_id = "id_I_know" 
wait = WebDriverWait(driver, 10) 
link = wait.until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, 'a[onclick="doSomething(%s)"]' % known_id)) 
) 
link.click() 

Вы также можете сделать щелчок «через javascript»:

driver.execute_script("arguments[0].click()", link) 

Смотрите также:

+0

Спасибо, но перезарядка или ожидание было именно то, что я хотел бы избежать. – genomnemmon

+0

@genomnemmon хорошо, обновлено. Помогает ли это? Благодарю. – alecxe

Смежные вопросы