diff --git a/package-lock.json b/package-lock.json index 3e0b19fad5..caf335de9b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14085,9 +14085,9 @@ } }, "node_modules/morgan": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.11.0.tgz", - "integrity": "sha512-zSkVu3t18r39pw4ixfBKvfZi3y2UOqr7d4WYwcj3m8nXpEQK4rPO6GLzs/CExoRgmX3y9EjmmcXqv6jq0SK46g==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.12.0.tgz", + "integrity": "sha512-OHpTRQwn2ezasILW8iKe+Yww1XsfWsZIpUOLF7RDb2g5GwO3trPaRwi7+8BDiJ7HFx2Kg2mfUdCBcVhwYlOz2g==", "dev": true, "license": "MIT", "dependencies": { diff --git a/tests/browser/01_io.js b/tests/browser/01_io.js index cbfec083af..435fc5d702 100644 --- a/tests/browser/01_io.js +++ b/tests/browser/01_io.js @@ -178,20 +178,40 @@ module.exports = { browser.click("#auto-bake-label"); browser.expect.element("#auto-bake").to.be.selected.before(1000); + // Record the transient loader state without polling for visibility at one instant. + // The loader is deliberately delayed by 200ms, so waiting to observe it directly is flaky. + browser.execute(function() { + const loader = document.getElementById("output-loader"); + window.autobakeLoaderWasVisible = loader.style.visibility === "visible"; + window.autobakeLoaderObserver = new MutationObserver(function() { + if (loader.style.visibility === "visible") { + window.autobakeLoaderWasVisible = true; + } + }); + window.autobakeLoaderObserver.observe(loader, { + attributes: true, + attributeFilter: ["style"] + }); + }); + // Add content to the input browser.pause(100); browser.sendKeys("#input-text .cm-content", "1"); - browser.waitForElementVisible("#output-loader"); + browser.waitForElementNotVisible("#stale-indicator", 5000); browser.pause(500); // Make another change while the previous input is being baked - browser - .sendKeys("#input-text .cm-content", "2") - .waitForElementNotVisible("#stale-indicator") - .waitForElementNotVisible("#output-loader"); - - // Ensure we got the latest input baked - utils.expectOutput(browser, "input12"); + browser.sendKeys("#input-text .cm-content", "2"); + + // Wait for the latest input rather than the delayed loading animation. + browser.expect.element("#output-text .cm-content").text.to.equal("input12").before(10000); + browser.waitForElementNotVisible("#output-loader", 10000); + browser.execute(function() { + window.autobakeLoaderObserver.disconnect(); + return window.autobakeLoaderWasVisible; + }, [], function({value}) { + browser.expect(value).to.equal(true); + }); // Turn autobake off again browser.click("#auto-bake-label");