From f00a4325ef045c541ca8cb7a8d27375c0acd5da4 Mon Sep 17 00:00:00 2001 From: Steffen Schaefer Date: Mon, 23 Jul 2018 15:02:48 +0200 Subject: [PATCH] Bug 4339: Ensures that we wait for validation in dialogs and click the ok button after it is scrolled into view and active --- .../src/com/sap/sailing/selenium/pages/PageObject.java | 4 +++- .../sailing/selenium/pages/common/DataEntryDialogPO.java | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/pages/PageObject.java b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/pages/PageObject.java index bbbdeb93ed1..d877bc20b78 100644 --- a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/pages/PageObject.java +++ b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/pages/PageObject.java @@ -630,8 +630,10 @@ public class PageObject { ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(false);", webElement); } - protected void scrollToViewAndClick(WebElement webElement) { + protected void scrollToViewAndClickWhenElementIsEntirelyVisible(WebElement webElement) { scrollToView(webElement); + // Browsers may use smooth scrolling + new WebDriverWait(driver, 10).until(t -> isElementEntirelyVisible(webElement)); webElement.click(); } diff --git a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/pages/common/DataEntryDialogPO.java b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/pages/common/DataEntryDialogPO.java index 6fed4c53712..37cc2d760d8 100644 --- a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/pages/common/DataEntryDialogPO.java +++ b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/pages/common/DataEntryDialogPO.java @@ -1,6 +1,7 @@ package com.sap.sailing.selenium.pages.common; import org.openqa.selenium.Alert; +import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedCondition; @@ -57,7 +58,11 @@ public abstract class DataEntryDialogPO extends PageArea { } public void pressOk(boolean accept) { - scrollToViewAndClick(this.okButton); + // This generically triggers revalidation in dialogs to ensure that the ok button gets enabled + ((JavascriptExecutor) driver).executeScript("!!document.activeElement ? document.activeElement.blur() : 0"); + + scrollToViewAndClickWhenElementIsEntirelyVisible(this.okButton); + new WebDriverWait(driver, 10).until(driver -> this.okButton.isEnabled()); ExpectedCondition condition = ExpectedConditions.alertIsPresent(); Alert alert = condition.apply(this.driver);