From b187ee97777beb55f3869c102adc97dd3459eabc Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Tue, 7 Oct 2025 18:07:10 +0200 Subject: [PATCH] openvidu-test-e2e: better wait for backdrop to disappear management --- .../test/e2e/OpenViduTestAppE2eTest.java | 60 ++++++++++++++++--- 1 file changed, 52 insertions(+), 8 deletions(-) diff --git a/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduTestAppE2eTest.java b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduTestAppE2eTest.java index 1ff56f193..6ca5d8362 100644 --- a/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduTestAppE2eTest.java +++ b/openvidu-test-e2e/src/test/java/io/openvidu/test/e2e/OpenViduTestAppE2eTest.java @@ -650,7 +650,7 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest { user.getDriver().findElement(By.id("trackPublish-videoCodec")).click(); Thread.sleep(300); user.getDriver().findElement(By.id("mat-option-" + codec.toLowerCase())).click(); - user.getDriver().findElement(By.id("close-dialog-btn")).click(); + this.waitForBackdropAndClick(user, "#close-dialog-btn"); Thread.sleep(300); this.addSubscriber(user, false); @@ -2570,7 +2570,7 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest { } finally { // Close dialog user.getWaiter().until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#close-dialog-btn"))); - user.getDriver().findElement(By.cssSelector("#close-dialog-btn")).click(); + this.waitForBackdropAndClick(user, "#close-dialog-btn"); try { Thread.sleep(500); } catch (InterruptedException e) { @@ -2586,7 +2586,7 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest { // Dialog already opened if (!user.getDriver().findElement(By.cssSelector("#subtitle")).getText().equals(videoId)) { // Wrong dialog - user.getDriver().findElement(By.cssSelector("#close-dialog-btn")).click(); + this.waitForBackdropAndClick(user, "#close-dialog-btn"); user.getDriver().findElement(By.cssSelector("#" + videoId + " ~ .bottom-div .video-track-info")) .click(); } @@ -2685,29 +2685,30 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest { Thread.sleep(300); } user.getDriver().findElement(By.xpath("//button[contains(@title,'Room API')]")).click(); - Thread.sleep(300); if (preset != null) { - user.getDriver().findElement(By.cssSelector("#ingress-preset-select")).click(); + this.waitForBackdropAndClick(user, "#ingress-preset-select"); Thread.sleep(300); user.getDriver().findElement(By.cssSelector("#mat-option-" + preset.toUpperCase())).click(); } else { if (!simulcast) { user.getDriver().findElement(By.cssSelector("#ingress-simulcast")).click(); + Thread.sleep(300); } - user.getDriver().findElement(By.cssSelector("#ingress-video-codec-select")).click(); + this.waitForBackdropAndClick(user, "#ingress-video-codec-select"); Thread.sleep(300); user.getDriver().findElement(By.cssSelector("#mat-option-" + codec.toUpperCase())).click(); } if (urlType != null) { - user.getDriver().findElement(By.cssSelector("#ingress-url-type-select")).click(); + this.waitForBackdropAndClick(user, "#ingress-url-type-select"); Thread.sleep(300); user.getDriver().findElement(By.cssSelector("#mat-option-" + urlType.toUpperCase())).click(); } if (urlUri != null) { user.getDriver().findElement(By.cssSelector("#ingress-url-uri-field")).sendKeys(urlUri); + Thread.sleep(300); } user.getDriver().findElement(By.cssSelector("#create-ingress-api-btn")).click(); - user.getDriver().findElement(By.cssSelector("#close-dialog-btn")).click(); + this.waitForBackdropAndClick(user, "#close-dialog-btn"); Thread.sleep(300); } @@ -2730,4 +2731,47 @@ public class OpenViduTestAppE2eTest extends AbstractOpenViduTestappE2eTest { } } + /** + * Waits for any Material Design backdrop overlays to disappear and then clicks the element. + * This prevents ElementClickInterceptedException caused by overlay backdrops. + */ + private void waitForBackdropAndClick(OpenViduTestappUser user, String cssSelector) { + WebDriverWait wait = new WebDriverWait(user.getDriver(), Duration.ofSeconds(10)); + + // Wait for any existing backdrop to disappear - try multiple selectors + try { + wait.until(ExpectedConditions.invisibilityOfElementLocated( + By.cssSelector(".cdk-overlay-backdrop"))); + } catch (Exception e) { + // Backdrop might not exist, continue + } + + // Additional wait for transparent backdrops specifically + try { + wait.until(ExpectedConditions.invisibilityOfElementLocated( + By.cssSelector(".cdk-overlay-transparent-backdrop"))); + } catch (Exception e) { + // Backdrop might not exist, continue + } + + // Additional wait for showing backdrops + try { + wait.until(ExpectedConditions.invisibilityOfElementLocated( + By.cssSelector(".cdk-overlay-backdrop-showing"))); + } catch (Exception e) { + // Backdrop might not exist, continue + } + + // Small additional wait to ensure animations complete + try { + Thread.sleep(100); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + // Wait for the element to be clickable + WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(cssSelector))); + element.click(); + } + }