假设有一个按钮的页面具有以下形式的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)');")
答案 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)
另见: