Class AbstractWebDriver

    • Method Detail

      • getIdleTimeout

         final Duration getIdleTimeout()

        Idle timeout before a READY driver is considered stale and eligible for recycling/retirement.

      • setIdleTimeout

         final Unit setIdleTimeout(Duration idleTimeout)

        Idle timeout before a READY driver is considered stale and eligible for recycling/retirement.

      • isMockedPageSource

         Boolean isMockedPageSource()

        True if pageSource is a mocked/fake value (e.g. offline / synthetic content).

      • isRecovered

         final Boolean isRecovered()

        Driver participated in a recovery workflow (e.g. auto relaunch) after crash.

      • setRecovered

         final Unit setRecovered(Boolean isRecovered)

        Driver participated in a recovery workflow (e.g. auto relaunch) after crash.

      • isReused

         final Boolean isReused()

        Driver reused from pool after previous task.

      • isRecyclable

         final Boolean isRecyclable()

        If recyclable the driver returns to a standby pool post-task; else it remains dedicated until retired.

      • setRecyclable

         final Unit setRecyclable(Boolean isRecyclable)

        If recyclable the driver returns to a standby pool post-task; else it remains dedicated until retired.

      • getIgnoreDOMFeatures

         final Boolean getIgnoreDOMFeatures()

        Skip DOM feature computation if true (performance optimization for pure interaction tasks).

      • setIgnoreDOMFeatures

         final Unit setIgnoreDOMFeatures(Boolean ignoreDOMFeatures)

        Skip DOM feature computation if true (performance optimization for pure interaction tasks).

      • getName

         <Error class: unknown class> getName()
      • getDelayPolicy

         <Error class: unknown class> getDelayPolicy()

        Delay policy (per action random delay ranges) derived from browser settings.

      • getTimeoutPolicy

         <Error class: unknown class> getTimeoutPolicy()

        Timeout policy (per action max durations) derived from browser settings.

      • getBrowser

         AbstractBrowser getBrowser()

        The browser of the driver. The browser defines methods and events to manipulate a real browser.

      • getId

         Integer getId()

        The driver id, starts with 1. The id is unique in process scope.

      • free

         final Unit free()

        Transition to READY (available for assignment). Resets cancellation/crash flags. Must only be called after INIT or WORKING states.

      • startWork

         final Unit startWork()

        Transition to WORKING (exclusive usage). Resets cancellation/crash flags.

      • retire

         final Unit retire()

        Mark for disposal after current task.

      • cancel

         final Unit cancel()

        Request cooperative cancellation of current task (best-effort).

      • addInitScript

         Unit addInitScript(String script)

        Adds a script which would be evaluated whenever the page is navigated. @mcp

        The script is evaluated after the document was created but before any of its scripts were run. This is useful to amend the JavaScript environment, e.g. to seed Math.random.

        This function should be invoked before a navigation, usually in an onWillNavigate event handler.

        Parameters:
        script - JavaScript source code to add.
      • navigate

         Unit navigate(String url)

        Navigates current page to the given URL. @mcp

        driver.navigate("https://www.example.com")
        driver.waitForNavigation()
        Parameters:
        url - URL to navigate page to.
      • reload

         Unit reload()

        Reloads the current page. @mcp

        This method should trigger a reload of the current page, similar to how a user would refresh the page in a browser.

      • currentUrl

         String currentUrl()

        Returns a string representing the current URL that the browser is looking at. @mcp

        The current url is always the main frame's document.documentURI if the browser succeed to return it, and is displayed in the browser's address bar.

        If the browser failed to return a proper url, returns the passed in url to navigate, just like a real user enter a url in the address bar but the browser failed to load the page.

        NOTE: the url can be non-standard, for example:

        about:blank chrome://newtab chrome://settings

        see ai.platon.cdt.kt.protocol.types.page.NavigationEntry.userTypedURL

        Returns:

        A string containing the URL of the document, or the passed in url to navigate.

      • url

         String url()

        The URL read-only property of the Document interface returns the document location as a string. @mcp

        This property equals to javascript document.URL. The document.URL property returns the same value. The document.documentURI property can be used on any document types, while the document.URL property can only be used on HTML documents.

        Returns:

        A string containing the URL of the document

      • documentURI

         String documentURI()

        Returns the document location as a string. @mcp

        This property equals to javascript document.documentURI.

        The document.URL property which returns the same value. The document.documentURI property can be used on any document types, while the document.URL property can only be used on HTML documents.

        Returns:

        The document's documentURI.

      • baseURI

         String baseURI()

        Returns the document's baseURI. @mcp

        The baseURI is a property of Node, it's the absolute base URL of the document containing the node. A baseURI is used to resolve relative URLs.

        The base URL is determined as follows:

        • By default, the base URL is the location of the document (as determined by window.location).

        • If the document has an <base> element, its href attribute is used.

        Returns:

        The document's baseURI.

      • title

         String title()

        Returns the title of the current page. @mcp

      • referrer

         String referrer()

        The referrer property returns the URI of the page that linked to this page. @mcp

        The value is an empty string if the user navigated to the page directly (not through a link, but, for example, by using a bookmark).

        Inside an <iframe>, the referrer will initially be set to the same value as the href of the parent window's Window.location.

        Returns:

        The document's referrer.

      • chat

         ModelResponse chat(String prompt, String selector)

        Interact with an AI model using the context of the element selected by selector. @mcp

        The AI model receives the element's content and structure as context along with the provided prompt.

        Parameters:
        prompt - The question or instruction for the AI model.
        selector - The CSS selector of the element to use as context.
        Returns:

        A ModelResponse containing the model's answer.

      • evaluate

         <T extends Any> T evaluate(String expression, T defaultValue)

        Executes JavaScript and returns the result, or defaultValue if the result is null or incompatible. @mcp

        Parameters:
        expression - The JavaScript expression to evaluate.
        defaultValue - The value to return if evaluation fails or returns null.
        Returns:

        The evaluation result or defaultValue.

      • evaluateValue

         <T extends Any> T evaluateValue(String expression, T defaultValue)

        Executes JavaScript and returns the result as a JSON-serializable value, or defaultValue if null/incompatible. @mcp

        Parameters:
        expression - The JavaScript expression to evaluate.
        defaultValue - The value to return if evaluation fails or returns null.
        Returns:

        The evaluation result or defaultValue.

      • isVisible

         Boolean isVisible(String selector)

        Returns whether the element is visible. @mcp

        driver.isVisible("input[name='q']")
        Parameters:
        selector -
        • The selector of the element to check.

        Returns:

        Whether the element is visible.

      • isChecked

         Boolean isChecked(String selector)

        Returns whether the element is checked. @mcp

        driver.isChecked("input[name='agree']")
        Parameters:
        selector -
        • The selector of the element to check.

        Returns:

        Whether the element is checked.

      • scrollDown

         Double scrollDown(Integer count)

        The current page frame scrolls down for count times. @mcp

        driver.scrollDown(3)

        TODO: use mouseWheel instead

        Parameters:
        count - The times to scroll down.
      • scrollUp

         Double scrollUp(Integer count)

        The current page frame scrolls up for count times. @mcp

        driver.scrollUp(3)

        TODO: use mouseWheel instead

        Parameters:
        count - The times to scroll up.
      • scrollBy

         Double scrollBy(Double pixels, Boolean smooth)

        Scrolls the current page frame vertically by the given number of pixels. @mcp

        Positive values scroll down, negative values scroll up. The target position is clamped to the scrollable range 0, scrollHeight - viewportHeight.

        When smooth is true a deterministic, step‑wise scrolling algorithm is used (instead of relying on the browser's native smooth scrolling) for higher stability: it issues incremental window.scrollTo() calls and waits for the viewport to settle after each step. This reduces race conditions with lazy‑loaded content or async layout changes and yields more predictable final positions.

        Typical usage:

        // Scroll down 200px smoothly (default)
        driver.scrollBy()
        // Scroll up 500px immediately
        driver.scrollBy(-500.0, smooth = false)
        // Scroll down one viewport height, smooth
        val y = driver.scrollBy(driver.viewportHeight(), smooth = true)
        Parameters:
        pixels - The delta in pixels to scroll; positive scrolls down, negative scrolls up.
        smooth - Whether to perform a deterministic smooth scrolling sequence.
        Returns:

        The final vertical scroll offset (window.scrollY) after scrolling.

      • scrollToTop

         Double scrollToTop()

        The current page frame scrolls to the top. @mcp

        driver.scrollToTop()
      • scrollToBottom

         Double scrollToBottom()

        The current page frame scrolls to the bottom. @mcp

        driver.scrollToBottom()
      • scrollToMiddle

         Double scrollToMiddle(Double ratio)

        The current page frame scrolls to the middle. @mcp

        driver.scrollToMiddle(0.2)
        driver.scrollToMiddle(0.5)
        driver.scrollToMiddle(0.8)
        Parameters:
        ratio - The ratio of the page to scroll to, 0.0 means the top, 1.0 means the bottom.
      • scrollToViewport

         Double scrollToViewport(Double n, Boolean smooth)

        Scrolls to the position of the n-th viewport.

        Parameters:
        n - Viewport index (1 represents the first screen)
        smooth - Whether to use smooth scrolling
        Returns:

        Actual scrollY pixel value after scrolling

      • outerHTML

         String outerHTML()

        Returns the document's HTML markup. @mcp

        val html = driver.outerHTML()

        If the document does not exist, returns null.

        Returns:

        The HTML markup of the document.

      • outerHTML

         String outerHTML(String selector)

        Returns the node's HTML markup, the node is located by selector. @mcp

        If the node does not exist, returns null.

        val html = driver.outerHTML("h2.title")
        Parameters:
        selector - The selector to locate the node.
        Returns:

        The HTML markup of the node.

      • textContent

         String textContent(String selector)

        Returns the text content of the document or a specific element. @mcp

        If selector is null, returns the text content of the entire document (usually document.body.innerText). If selector is provided, returns the text content of the first matching element.

        If the document or element does not exist, returns null.

        val bodyText = driver.textContent()
        val titleText = driver.textContent("h1.title")
        Parameters:
        selector - The CSS selector of the element.
        Returns:

        The text content, or null if not found.

      • extract

         Map<String, String> extract(Map<String, String> fields)

        Extracts multiple fields from the page using CSS selectors. @mcp

        Parameters:
        fields - A map where keys are field names and values are CSS selectors.
        Returns:

        A map containing the extracted text content for each field. Values are null if the selector matches nothing.

      • selectFirstTextOrNull

         String selectFirstTextOrNull(String selector)

        Returns the node's text content, the node is located by selector. @mcp

        If the node does not exist, returns null.

        val text = driver.selectFirstTextOrNull("h2.title")
        Parameters:
        selector - The selector to locate the node.
        Returns:

        The text content of the node.

      • selectTextAll

         List<String> selectTextAll(String selector)

        Returns a list of text contents of all the elements matching the specified selector within the page. @mcp

        If no elements match the selector, returns an empty list.

        val texts = driver.selectTextAll("h2")
        Parameters:
        selector - The selector to locate the nodes.
        Returns:

        The text contents of the nodes.

      • selectFirstAttributeOrNull

         String selectFirstAttributeOrNull(String selector, String attrName)

        Returns the node's attribute value, the node is located by selector, the attribute is attrName. @mcp

        If the node does not exist, or the attribute does not exist, returns null.

        val classes = driver.selectFirstAttributeOrNull("h2.title", "class")
        Parameters:
        selector - The selector to locate the node.
        attrName - The attribute name to retrieve.
        Returns:

        The attribute value of the node.

      • selectAttributes

         Map<String, String> selectAttributes(String selector)

        Returns the node's attribute values, the node is located by selector. @mcp

        If the node do not exist, or the attribute does not exist, returns an empty list.

        val classes = driver.selectAttributes("h2.title", "class")
        Parameters:
        selector - The selector to locate the nodes.
        Returns:

        The attribute pairs of the nodes.

      • selectAttributeAll

         List<String> selectAttributeAll(String selector, String attrName, Integer start, Integer limit)

        Returns the nodes' attribute values, the nodes are located by selector, the attribute is attrName. @mcp

        If the nodes do not exist, or the attribute does not exist, returns an empty list.

        val classes = driver.selectAttributeAll("h2.title", "class")
        Parameters:
        selector - The selector to locate the nodes.
        attrName - The attribute name to retrieve.
        start - The offset of the first node to select.
        limit - The maximum number of nodes to select.
        Returns:

        The attribute values of the nodes.

      • setAttribute

         Unit setAttribute(String selector, String attrName, String attrValue)

        Set the attribute of an element located by selector. @mcp

        driver.setAttribute("h2.title", "class", "header")
        Parameters:
        selector - The CSS query to select an element.
        attrName - The attribute name to set.
        attrValue - The attribute value to set.
      • setAttributeAll

         Unit setAttributeAll(String selector, String attrName, String attrValue)

        Set the attribute of all elements matching the CSS query. @mcp

        driver.setAttributeAll("h2.title", "class", "header")
        Parameters:
        selector - The CSS query to select elements.
        attrName - The attribute name to set.
        attrValue - The attribute value to set.
      • selectFirstPropertyValueOrNull

         String selectFirstPropertyValueOrNull(String selector, String propName)

        Returns the node's property value, the node is located by selector, the property is propName. @mcp

        If the node does not exist, or the property does not exist, returns null.

        val classes = driver.selectFirstPropertyOrNull("input#input", "value")
        Parameters:
        selector - The selector to locate the node.
        propName - The property name to retrieve.
        Returns:

        The property value of the node.

      • selectPropertyValueAll

         List<String> selectPropertyValueAll(String selector, String propName, Integer start, Integer limit)

        Returns the nodes' property values, the nodes are located by selector, the property is propName. @mcp

        If the nodes do not exist, or the property does not exist, returns an empty list.

        val classes = driver.selectPropertyAll("input#input", "value")
        Parameters:
        selector - The selector to locate the nodes.
        propName - The property name to retrieve.
        start - The offset of the first node to select.
        limit - The maximum number of nodes to select.
        Returns:

        The property values of the nodes.

      • setProperty

         Unit setProperty(String selector, String propName, String propValue)

        Set the property of an element located by selector. @mcp

        driver.setProperty("input#input", "value")
        Parameters:
        selector - The CSS query to select an element.
        propName - The property name to set.
        propValue - The property value to set.
      • setPropertyAll

         Unit setPropertyAll(String selector, String propName, String propValue)

        Set the property of all elements matching the CSS query. @mcp

        driver.setPropertyAll("input#input", "value")
        Parameters:
        selector - The CSS query to select elements.
        propName - The property name to set.
        propValue - The property value to set.
      • selectHyperlinks

         List<Hyperlink> selectHyperlinks(String selector, Integer offset, Integer limit)

        Find hyperlinks in elements matching the selector. NOTE: Currently constructs absolute URLs by concatenating baseURI and raw href; TODO: robust resolution & abs: support.

        Parameters:
        selector - The CSS query to select elements.
        offset - The offset of the first element to select.
        limit - The maximum number of elements to select.
      • selectAnchors

         List<GeoAnchor> selectAnchors(String selector, Integer offset, Integer limit)

        Select anchors (link + coordinates) – placeholder implementation until util binding available.

        Parameters:
        selector - The CSS query to select elements.
        offset - The offset of the first element to select.
        limit - The maximum number of elements to select.
      • selectImages

         List<String> selectImages(String selector, Integer offset, Integer limit)

        Select image URLs (abs:src) – placeholder implementation.

        Parameters:
        selector - The CSS query to select elements.
        offset - The offset of the first element to select.
        limit - The maximum number of elements to select.
      • clickTextMatches

         Unit clickTextMatches(String selector, String pattern, Integer count)

        This method clicks an element with selector whose text content matches pattern, and then focuses it. @mcp

        If there's no element matching selector, or the element's text content doesn't match pattern, nothing to do.

        driver.clickTextMatches("button", "submit")

        TODO: use playwright style selector which supports text matching, for example: button:has-text("submit")

        Parameters:
        selector -
        • A selector of an element to focus. If there are multiple elements satisfying the selector, the first will be focused.

        pattern - The pattern to match the text content.
        count - The number of times to click.
      • clickMatches

         Unit clickMatches(String selector, String attrName, String pattern, Integer count)

        This method clicks an element with selector whose attribute name is attrName and value matches pattern, and then focuses it. @mcp

        If there's no element matching selector, or the element has no attribute attrName, or the element's attribute value doesn't match pattern, nothing to do.

        driver.clickMatches("button", "type", "submit")
        Parameters:
        selector -
        • A selector of an element to focus. If there are multiple elements satisfying the selector, the first will be focused.

        attrName - The attribute name to match.
        pattern - The pattern to match the attribute value.
        count - The number of times to click.
      • check

         Unit check(String selector)

        This method check an element with selector. If there's no element matching selector, nothing to do. @mcp

        Parameters:
        selector -
        • A selector of an element to check. If there are multiple elements satisfying the selector, the first will be checked.

      • uncheck

         Unit uncheck(String selector)

        This method uncheck an element with selector. If there's no element matching selector, nothing to do. @mcp

        Parameters:
        selector -
        • A selector of an element to uncheck. If there are multiple elements satisfying the selector, the first will be focused.

      • waitForSelector

         Duration waitForSelector(String selector)

        Wait until the element identified by the selector becomes present in the DOM or timeout. @mcp

        val remainingTime = driver.waitForSelector("h2.title")
        Parameters:
        selector - The selector of the element to wait for.
        Returns:

        The remaining time until timeout when the element becomes present.

      • waitForSelector

         Duration waitForSelector(String selector, SuspendFunction0<Unit> action)

        Wait for the element identified by the selector to become present in the DOM, or until timeout. @mcp

        This method periodically checks for the existence of the element. If the element is not found during a check, the action will be executed, such as scrolling the page down.

        val remainingTime = driver.waitForSelector("h2.title") {
         driver.scrollDown()
        }
        Parameters:
        action - The action to execute when the element is not found.
      • waitForNavigation

         Duration waitForNavigation(String oldUrl)

        Wait until the current url changes or timeout. @mcp

        val url = "https://www.example.com"
        driver.navigate(url)
        var remainingTime = driver.waitForNavigation()
        if (remainingTime 0) {
          driver.click("a[href='/next']")
          remainingTime = driver.waitForNavigation(url)
        }
      • waitForNavigation

         Duration waitForNavigation(String oldUrl, Duration timeout)

        Wait until the current url changes or timeout. @mcp

        val timeout = Duration.ofSeconds(30)
        val url = "https://www.example.com"
        driver.navigate(url)
        var remainingTime = driver.waitForNavigation(timeout)
        if (remainingTime 0) {
          driver.click("a[href='/next']")
          remainingTime = driver.waitForNavigation(url, timeout)
        }
        Parameters:
        timeout - The maximum time to wait for the url to change.
      • waitUntil

         Duration waitUntil(SuspendFunction0<Boolean> predicate)

        Wait until the predicate returns true. @mcp

        val remainingTime = driver.waitUntil {
           driver.exists("h2.title")
        }
        Parameters:
        predicate - The predicate to check.
        Returns:

        The remaining time until timeout when the predicate returns true.

      • waitUntil

         Duration waitUntil(Duration timeout, SuspendFunction0<Boolean> predicate)

        Wait until the predicate returns true. @mcp

        val remainingTime = driver.waitUntil(Duration.ofSeconds(10)) {
           driver.exists("h2.title")
        }
        Parameters:
        timeout - The maximum time to wait for the predicate to return true.
        predicate - The predicate to check.
        Returns:

        The remaining time until timeout when the predicate returns true.

      • randomDelayMillis

         final Long randomDelayMillis(String action, IntRange fallback)

        Generate a random delay in milliseconds for an action.

        Parameters:
        action - Named action bucket (fallbacks: specific -> default -> provided fallback range).
        fallback - Used if policy values are missing / invalid.
      • newJsoupSession

         Connection newJsoupSession()

        Create a new Jsoup session with the last page's context, which means, the same headers and cookies. @mcp

        Returns:

        The Jsoup session.

      • loadJsoupResource

         Connection.Response loadJsoupResource(String url)

        Load the url as a resource with Jsoup rather than browser rendering, with the last page's context. @mcp

        This means, the same headers and cookies.

        Parameters:
        url - The URL to load.
        Returns:

        The Jsoup response.

      • loadResource

         NetworkResourceResponse loadResource(String url)

        Load the url as a resource without browser rendering, with the last page's context. @mcp

        This means, the same headers and cookies.

        Parameters:
        url - The URL to load.
        Returns:

        The network resource response.