簡體   English   中英

Selenium:如何跟蹤DOM操作以查找元素的可見性?

[英]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類提供了許多有用的元素狀態,例如ElementToBeVisibleElementToBeClickable等。

這應該夠了吧。

以下是您可以做什么的示例:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM