在陈旧/不存在的元素上触发onclick事件

时间:2016-04-02 13:45:26

标签: python selenium

假设有一个按钮的页面具有以下形式的onclick事件:

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

ID是永久性的,但有时链接尚未加载,或者已经过时,您需要重新加载它们。

是否可以在Selenium中触发onclick事件而不获取webelement和click(),或者更改现有webelement的onclick事件的id?

编辑: 目前最有希望的是使用javascript:

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

但是这并没有在chrome元素检查器中明显改变id,链接也不再做任何事情。我的js语法中有错误吗?另外,当我手动更改chrome元素检查器中的id时,它可以正常工作。

这对我有用:

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

1 个答案:

答案 0 :(得分:0)

如果您知道此元素的id,那么"doSomething(known_id) onclick属性值的元素可以wait可点击

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&#34;

进行点击
driver.execute_script("arguments[0].click()", link)

另见: