diff options
author | Martin Stockhammer <martin_s@apache.org> | 2017-06-09 21:35:31 +0200 |
---|---|---|
committer | Martin Stockhammer <martin_s@apache.org> | 2017-06-09 21:35:31 +0200 |
commit | 85352aae7d53a6de4f8839987025d1ec643c7f04 (patch) | |
tree | 83b3a7efea52e68a7cdef8440b56210e2066e8e7 /archiva-modules/archiva-web/archiva-webapp-test | |
parent | 75f14a95d9fbe62de9c2529562e8a004d969fcb1 (diff) | |
download | archiva-85352aae7d53a6de4f8839987025d1ec643c7f04.tar.gz archiva-85352aae7d53a6de4f8839987025d1ec643c7f04.zip |
Improving robustness of JS Tests
Fixed timing issues that occurred during javascript updates.
Diffstat (limited to 'archiva-modules/archiva-web/archiva-webapp-test')
6 files changed, 85 insertions, 46 deletions
diff --git a/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/RepositoryAdminTest.java b/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/RepositoryAdminTest.java index 0ea8580ea..d9d0da10b 100644 --- a/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/RepositoryAdminTest.java +++ b/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/RepositoryAdminTest.java @@ -48,30 +48,34 @@ public class RepositoryAdminTest public void testManagedRepository() { login( getAdminUsername(), getAdminPassword() ); - WebDriverWait wait = new WebDriverWait(getWebDriver(), 10); - wait.until(ExpectedConditions.elementToBeClickable(By.id("menu-repositories-list-a"))); - clickLinkWithLocator( "menu-repositories-list-a"); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("managed-repositories-view-a"))); - clickLinkWithXPath( "//a[@href='#remote-repositories-content']"); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("remote-repositories-view-a"))); - clickLinkWithXPath( "//a[@href='#remote-repository-edit']", false ); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("remote-repository-save-button"))); + WebDriverWait wait = new WebDriverWait(getWebDriver(), 20); + WebElement el; + el = wait.until(ExpectedConditions.elementToBeClickable(By.id("menu-repositories-list-a"))); + tryClick( el, ExpectedConditions.presenceOfElementLocated( By.id( "managed-repositories-view-a" ) ), + "Managed Repositories not activated"); + el = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@href='#remote-repositories-content']"))); + tryClick(el,ExpectedConditions.visibilityOfElementLocated(By.id("remote-repositories-view-a")), + "Remote Repositories View not available"); + el = wait.until(ExpectedConditions.elementToBeClickable( By.xpath("//a[@href='#remote-repository-edit']") )); + el = tryClick(el, ExpectedConditions.visibilityOfElementLocated(By.id("remote-repository-save-button")), + "Repository Save Button not available"); setFieldValue( "id", "myrepoid" ); setFieldValue( "name", "My repo name" ); setFieldValue( "url", "http://www.repo.org" ); - clickButtonWithLocator( "remote-repository-save-button"); + el.click(); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("remote-repositories-view-a"))); - - clickLinkWithLocator( "menu-proxy-connectors-list-a"); + el = wait.until(ExpectedConditions.elementToBeClickable( By.id("menu-proxy-connectors-list-a") )); + el.click(); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("proxy-connectors-view-tabs-a-network-proxies-grid"))); wait.until(ExpectedConditions.textToBePresentInElementLocated(By.id("main-content"), "Proxy Connectors")); // proxy connect wait.until(ExpectedConditions.textToBePresentInElementLocated(By.id("proxy-connectors-view"), "central" )); assertTextNotPresent( "myrepoid" ); - clickButtonWithLocator( "proxy-connectors-view-tabs-a-edit"); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("proxy-connector-btn-save"))); + el = wait.until(ExpectedConditions.elementToBeClickable( By.id("proxy-connectors-view-tabs-a-edit") )); + el.click(); + el = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("proxy-connector-btn-save"))); selectValue( "sourceRepoId", "internal" ); // Workaround // TODO: Check after upgrade of htmlunit, bootstrap or jquery @@ -80,7 +84,7 @@ public class RepositoryAdminTest // End of Workaround wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("targetRepoId"))); selectValue( "targetRepoId", "myrepoid" ); - clickButtonWithLocator( "proxy-connector-btn-save"); + el.click(); wait.until(ExpectedConditions.textToBePresentInElementLocated(By.id("user-messages"),"ProxyConnector added")); wait.until(ExpectedConditions.textToBePresentInElementLocated(By.id("proxy-connectors-view"), "central" )); wait.until(ExpectedConditions.textToBePresentInElementLocated(By.id("proxy-connectors-view"), "myrepoid" )); @@ -88,7 +92,7 @@ public class RepositoryAdminTest // This is needed here for HTMLUnit Tests. Currently do not know why, wait is not working for the // list entries down waitPage(); - WebElement el = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("proxy-connector-edit-order-div"))); + el = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("proxy-connector-edit-order-div"))); assertTextPresent( "internal" ); List<WebElement> repos = el.findElements(By.xpath("./div")); Assert.assertTrue("First repo is myrepo", repos.get(0).getText().contains("myrepoid")); diff --git a/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/WebDriverBrowseTest.java b/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/WebDriverBrowseTest.java index 247049452..17b90155b 100644 --- a/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/WebDriverBrowseTest.java +++ b/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/WebDriverBrowseTest.java @@ -141,13 +141,6 @@ public class WebDriverBrowseTest { elements = find( By.id("login-link-a")); WebElement webElement = elements.get( 0 ).getElement(); - for(FluentWebElement element : elements) { - log.info("Found login link: "+element.getElement().getTagName()+ " "+ element.getElement().getText()); - } - log.info("innerText: "+webElement.getAttribute("innerText")); - log.info("value: "+webElement.getAttribute("value")); - log.info("innerHTML: "+webElement.getAttribute( "innerHTML" )); - log.info("JS: "+((( JavascriptExecutor)getDriver()).executeScript("return $(arguments[0]).text();", webElement))); if (getDriver() instanceof HtmlUnitDriver) { Assert.assertEquals( "LOGIN", webElement.getText().toUpperCase() ); } else diff --git a/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/WebDriverTest.java b/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/WebDriverTest.java index a27ee47eb..0cdce6536 100644 --- a/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/WebDriverTest.java +++ b/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/WebDriverTest.java @@ -51,7 +51,7 @@ public class WebDriverTest extends FluentTest { - final Logger log = LoggerFactory.getLogger( WebDriver.class ); + final Logger log = LoggerFactory.getLogger( WebDriverTest.class ); @Override public void takeScreenShot( String fileName ) @@ -100,10 +100,6 @@ public class WebDriverTest log.info("Found login link: "+element.getElement().getTagName()+ " "+ element.getElement().getText()); } WebElement webElement = elements.get(0).getElement(); - log.info("innerText: "+webElement.getAttribute("innerText")); - log.info("value: "+webElement.getAttribute("value")); - log.info("innerHTML: "+webElement.getAttribute( "innerHTML" )); - log.info("JS: "+(((JavascriptExecutor)getDriver()).executeScript("return $(arguments[0]).text();", webElement))); if (getDriver() instanceof HtmlUnitDriver ) { Assert.assertEquals( "LOGIN", webElement.getText().toUpperCase() ); } else diff --git a/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/parent/AbstractArchivaTest.java b/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/parent/AbstractArchivaTest.java index 4409ae3ca..44907ab2e 100644 --- a/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/parent/AbstractArchivaTest.java +++ b/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/parent/AbstractArchivaTest.java @@ -3,6 +3,7 @@ package org.apache.archiva.web.test.parent; import org.junit.runner.RunWith; import org.junit.runners.BlockJUnit4ClassRunner; import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; @@ -101,10 +102,11 @@ public abstract class AbstractArchivaTest { login( getAdminUsername(), getAdminPassword() ); WebDriverWait wait = new WebDriverWait(getWebDriver(), 10); - clickLinkWithLocator( "menu-users-list-a"); - wait.until(ExpectedConditions.elementToBeClickable(By.id("users-view-tabs-li-user-edit-a"))); - clickLinkWithLocator( "users-view-tabs-li-user-edit-a"); - wait.until(ExpectedConditions.elementToBeClickable(By.id("user-create-form-register-button"))); + WebElement el = wait.until(ExpectedConditions.elementToBeClickable( By.id("menu-users-list-a") )); + el = tryClick(el, ExpectedConditions.elementToBeClickable(By.id("users-view-tabs-li-user-edit-a")), "User List not available"); + el = tryClick(el, ExpectedConditions.elementToBeClickable(By.id("users-view-tabs-li-user-edit-a")),"User Edit View not available"); + el = tryClick(el, ExpectedConditions.elementToBeClickable(By.id("user-create-form-register-button")), + "Register Form not available"); assertCreateUserPage(); setFieldValue( "username", userName ); setFieldValue( "fullname", fullName ); @@ -112,10 +114,9 @@ public abstract class AbstractArchivaTest setFieldValue( "password", password ); setFieldValue( "confirmPassword", confirmPassword ); - clickLinkWithLocator( "user-create-form-register-button"); + el.click(); - wait.until(ExpectedConditions.presenceOfElementLocated(By.id("users-grid-user-id-" + userName))); - assertTextPresent( "User " + userName + " created." ); + wait.until(ExpectedConditions.textToBePresentInElementLocated(By.id("user-messages"),"User " + userName + " created." )); assertElementPresent( "users-grid-user-id-" + userName ); if ( valid ) diff --git a/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/parent/AbstractSeleniumTest.java b/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/parent/AbstractSeleniumTest.java index d6d4a1f82..698d6a045 100644 --- a/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/parent/AbstractSeleniumTest.java +++ b/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/parent/AbstractSeleniumTest.java @@ -19,30 +19,22 @@ package org.apache.archiva.web.test.parent; * under the License. */ -import com.thoughtworks.selenium.Selenium; -import com.thoughtworks.selenium.webdriven.WebDriverBackedSelenium; import org.apache.archiva.web.test.tools.ArchivaSeleniumExecutionRule; import org.apache.archiva.web.test.tools.WebdriverUtility; import org.junit.Assert; import org.junit.Rule; import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.nio.file.Files; import java.nio.file.Path; -import java.sql.Time; import java.text.SimpleDateFormat; -import java.util.Arrays; import java.util.Date; import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import java.util.concurrent.TimeUnit; +import java.util.function.Function; -import org.apache.commons.io.FileUtils; import org.openqa.selenium.*; import org.openqa.selenium.htmlunit.HtmlUnitDriver; import org.openqa.selenium.support.ui.ExpectedConditions; @@ -294,10 +286,7 @@ public abstract class AbstractSeleniumTest WebElement passwordField = wait.until(ExpectedConditions.visibilityOf(getWebDriver().findElement(By.id("user-login-form-password")))); wait = new WebDriverWait(getWebDriver(),5); WebElement button = wait.until(ExpectedConditions.elementToBeClickable(By.id("modal-login-ok"))); - logger.info("Login form visible"); - logger.info("Enter username "+username); usernameField.sendKeys(username); - logger.info("Enter password "+password); passwordField.sendKeys(password); /* if ( rememberMe ) @@ -631,6 +620,59 @@ public abstract class AbstractSeleniumTest } } + /** + * Executes click() on the WebElement <code>el</code> and waits for the conditions. + * If the condition is not fulfilled in <code>maxWaitTimeInS</code>, the click is executed again + * and waits again for the condition. + * After the number of attempts as given by the parameter an assertion error will be thrown, with + * the given <code>message</code>. + * + * If the click was successful the element is returned that was created by the condition. + * + * @param el The element where the click is executed + * @param conditions The conditions to wait for after the click + * @param message The assertion messages + * @param attempts Maximum number of click attempts + * @param maxWaitTimeInS The time in seconds to wait that the condition is fulfilled. + * @param <V> The return type + * @return + */ + public <V> V tryClick( WebElement el, Function<? super WebDriver, V> conditions, String message, int attempts, int maxWaitTimeInS) + { + int count = attempts; + WebDriverWait wait = new WebDriverWait( getWebDriver(), maxWaitTimeInS ); + V result = null; + Exception ex = null; + while(count>0) + { + el.click(); + try + { + result = wait.until( conditions ); + count=0; + ex = null; + } catch (Exception e) { + ex = e; + count--; + } + } + if (ex!=null) { + Assert.fail( message); + } + return result; + } + + public <V> V tryClick(WebElement el, Function<? super WebDriver, V> conditions, String message, int attempts ) + { + return tryClick( el, conditions, message, attempts, 10 ); + } + + public <V> V tryClick(WebElement el, Function<? super WebDriver, V> conditions, String message) + { + return tryClick( el, conditions, message, 3); + } + + public void setFieldValues( Map<String, String> fieldMap ) { Map.Entry<String, String> entry; diff --git a/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/tools/ArchivaSeleniumExecutionRule.java b/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/tools/ArchivaSeleniumExecutionRule.java index 16417fa78..40260c948 100644 --- a/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/tools/ArchivaSeleniumExecutionRule.java +++ b/archiva-modules/archiva-web/archiva-webapp-test/src/test/java/org/apache/archiva/web/test/tools/ArchivaSeleniumExecutionRule.java @@ -41,12 +41,15 @@ public class ArchivaSeleniumExecutionRule { try { + log.info("Test "+method.getDeclaringClass().getName()+"#"+method.getName()); ( (AbstractSeleniumTest) target ).open(); method.getMethod().invoke( target ); } catch ( Throwable e ) { + log.info("Exception thrown in Selenium test: "+e.getClass().getName()+" - "+e.getMessage()); + log.info("Method "+method.getName()); String fileName = ( (AbstractSeleniumTest) target ).captureScreenShotOnFailure( e, method.getMethod().getName(), target.getClass().getName() ); |