我有一个测试html页面,该页面更改了div元素的innerHTML。 当innerHTML更改时,我无法使用selenium.webdriver.support.abstract_event_listener.after_change_value_of(请参阅https://seleniumhq.github.io/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.event_firing_webdriver.html#module-selenium.webdriver.support.event_firing_webdriver)来获取事件通知。我想知道我要去哪里错了,是什么能暗示这种事件的正确机制。
我已经用python编写了一个小型测试程序,该程序使用了硒webdriver和chromedriver。 将触发before_navigate_to和after_navigate_to事件,但不会触发after_change_value_of。
#....
#....
def dump_msg(msg):
print("[%d] %s" % (current_milli_time(), msg))
#....
#....
class MyListener(AbstractEventListener):
def before_navigate_to(self, url, driver):
dump_msg("Before navigate to %s" % url)
def after_navigate_to(self, url, driver):
dump_msg("After navigate to %s" % url)
def after_change_value_of(self, element, driver):
#+---------------------------+
#| why isnt this working ??? |
#+---------------------------+
dump_msg("After change value of %s" % type(element))
#....
#....
driver = webdriver.Chrome("/usr/bin/chromedriver",chrome_options=chrome_options)
ef_driver = EventFiringWebDriver(driver, MyListener())
ef_driver.get("file:///test/test_change.html")
#....
#....
test_change.html如下
<!DOCTYPE html>
<html>
<head>
<style>
.boxed1 {
background-color: yellow;
opacity:0.4;
}
</style>
</head>
<body>
<div id="foo" class="boxed1"> </div>
<script>
document.getElementById("foo").innerHTML = Date();
setInterval(function() {
curr_date_time = Date();
document.getElementById("foo").innerHTML = curr_date_time;
//console.log("updated date_time to " + curr_date_time);
}, 1000);
</script>
</body>
</html>
运行程序会产生
...
[1562418297938]导航到file:///test/test_change.html
之前
[1562418298269]导航到file:///test/test_change.html
之后
...
我希望看到“ ...的更改值之后”,但不存在