Skip to content

[🐛 Bug]: v9: Previously working method of getting element from classic frame not working #13384

@danielhjacobs

Description

@danielhjacobs

Have you read the Contributing Guidelines on issues?

WebdriverIO Version

v9

Node.js Version

22

Mode

Standalone Mode

Which capabilities are you using?

No response

What happened?

This code is no longer working:

        await browser.switchToFrame(await browser.$("#test-frame"));
        await browser.$("ruffle-object").waitForExist();

        const actual = await browser
            .$("#test-container")
            .getHTML({ includeSelectorTag: false, pierceShadowRoot: false });
		

We're using the following HTML that converts objects to ruffle-objects with the script:

index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>WEB</title>
        <script src="/dist/ruffle.js" type="text/javascript"></script>
    </head>

    <frameset rows="10%,90%">
        <frame
            id="nav-frame"
            name="nav"
            src="frame1.html"
            scrolling="no"
            frameborder="0"
        ></frame>
        <frame
            id="test-frame"
            name="content"
            src="frame2.html"
            scrolling="no"
            frameborder="0"
        ></frame>
    </frameset>
</html>

frame1.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Nav</title>
    </head>

    <body>
        <a href="frame2.html" target="content" id="reload-link">Reload frame</a>
    </body>
</html>

frame2.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>REAL CONTENT</title>
        <style>
            * {
                margin: 0;
            }
        </style>
    </head>

    <body>
        <div id="test-container">
            <object
                type="application/x-shockwave-flash"
                data="/test_assets/example.swf"
                width="550"
                height="400"
            >
                <param name="movie" value="/test_assets/example.swf" />
                <param name="quality" value="high" />
            </object>
        </div>
    </body>
</html>

The actual source code we had used can be found at https://github.com/ruffle-rs/ruffle/tree/master/web/packages/selfhosted/test/polyfill/classic_frames_provided. Though we did switch the CSS selector and the getHTML call as needed.

What is your expected behavior?

The ruffle-object should exist after a small amount of time thanks to the JS replacing the object in the frame.

How to reproduce the bug.

        await browser.switchToFrame(await browser.$("#test-frame"));
        await browser.$("ruffle-object").waitForExist();

        const actual = await browser
            .$("#test-container")
            .getHTML({ includeSelectorTag: false, pierceShadowRoot: false });
		

Relevant log output

Error: element ("ruffle-object") still not existing after 30000ms

Code of Conduct

  • I agree to follow this project's Code of Conduct

Is there an existing issue for this?

  • I have searched the existing issues

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions