[英]Selenium: How to track DOM manipulation to find visibility of an element?
是否有可能觀看網頁上的事件,例如:某個元素已可見?
使用硒有可能嗎?
例如,如果我定義了一個時間表,以觀看從startTime到endTime的網頁。 從startTime到endTime,可以捕獲不同的網頁事件,其中包括dom操作(例如:html元素已添加並變得可見)。 到達endTime后,我將遍歷事件列表,並可以驗證是否發生了特定事件。
就我而言,我想了解一個html元素是否可見。
找出問題的常用方法是使用webdriver的API來檢查元素的可見性,但會超時。
但是,我想捕獲不同的事件並進行一些回調,從而驗證是否發生了某些預期事件。
[更新]:Selenium中是否支持MutationObserver ?
是的,您可以使用WebDriver文檔中所示的顯式等待。
ExpectedConditions
類提供了許多有用的元素狀態,例如ElementToBeVisible
, ElementToBeClickable
等。
這應該夠了吧。
以下是您可以做什么的示例:
WebDriverWait wait = new WebDriverWait(driver, 10); // how many seconds
wait.until(ExpectedConditions.elementToBeClickable(myPage.getButton()));
對於更復雜的事情,您可以為WebDriverWait
提供自己的Function
,即:
wait.until(o -> {
return driver.getWindowHandles().stream().collect(Collectors.toList()).get(tabNo);
});
Selenium不支持事件,因此您可能應該轉到另一個似乎支持事件的工具puppetter 。 也就是說,通過將所有事件存儲在頁面的變量中,仍然可以通過腳本注入來記錄事件:
jse.executeScript(
"var window.__events = [];" +
"new MutationObserver(function(mutations) {" +
" mutations.forEach(function(mutation) {" +
" window.__events.push(mutation);" +
" });" +
"})).takeRecords();");
然后只需返回列表:
Object events = jse.executeScript("return window.__events;");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.