You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openmeetings.apache.org by Maxim Solodovnik <so...@gmail.com> on 2013/10/12 04:47:22 UTC

Re: svn commit: r1531463 - in /openmeetings/trunk/singlewebapp: ./ src/test/java/org/apache/openmeetings/test/selenium/

Hello Sebastian,

Is it OK if I'll change AbstractTestDefaults to extend
AbstractOpenmeetingsSpringTest and remove unnecessary annotations?
I would like to avoid copy/pasted code as much as possible :)


On Sat, Oct 12, 2013 at 6:47 AM, <se...@apache.org> wrote:

> Author: sebawagner
> Date: Fri Oct 11 23:47:10 2013
> New Revision: 1531463
>
> URL: http://svn.apache.org/r1531463
> Log:
> OPENMEETINGS-816 UI test to sign up, to be continued
> Added cglib to .classpath as you need it to run JUnit from inside Eclipse
>
> Added:
>
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
>       - copied, changed from r1529278,
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
>
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
> Removed:
>
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
> Modified:
>     openmeetings/trunk/singlewebapp/.classpath
>
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>
> Modified: openmeetings/trunk/singlewebapp/.classpath
> URL:
> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/.classpath?rev=1531463&r1=1531462&r2=1531463&view=diff
>
> ==============================================================================
> --- openmeetings/trunk/singlewebapp/.classpath (original)
> +++ openmeetings/trunk/singlewebapp/.classpath Fri Oct 11 23:47:10 2013
> @@ -1,23 +1,4 @@
>  <?xml version="1.0" encoding="UTF-8"?>
> -<!--
> -  Licensed to the Apache Software Foundation (ASF) under one
> -  or more contributor license agreements.  See the NOTICE file
> -  distributed with this work for additional information
> -  regarding copyright ownership.  The ASF licenses this file
> -  to you under the Apache License, Version 2.0 (the
> -  "License"); you may not use this file except in compliance
> -  with the License.  You may obtain a copy of the License at
> -
> -      http://www.apache.org/licenses/LICENSE-2.0
> -
> -  Unless required by applicable law or agreed to in writing,
> -  software distributed under the License is distributed on an
> -  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> -  KIND, either express or implied.  See the License for the
> -  specific language governing permissions and limitations
> -  under the License.
> -
> --->
>  <classpath>
>         <classpathentry kind="src" path="src/axis/java"/>
>         <classpathentry kind="src" path="src/db/java"/>
> @@ -64,5 +45,6 @@
>         <classpathentry kind="lib"
> path="build/red5/server/dist/lib/ehcache-core-2.5.0.jar"/>
>         <classpathentry kind="lib"
> path="build/red5/server/dist/plugins/tomcat-embed-core-7.0.41.jar"/>
>         <classpathentry kind="lib"
> path="build/red5/server/dist/lib/bcprov-jdk15on-1.47.jar"/>
> +       <classpathentry kind="lib"
> path="build/red5/server/dist/lib/cglib-nodep-2.2.2.jar"/>
>         <classpathentry kind="output" path="build/classes/eclipse"/>
>  </classpath>
>
> Copied:
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
> (from r1529278,
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java)
> URL:
> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java?p2=openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java&p1=openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java&r1=1529278&r2=1531463&rev=1531463&view=diff
>
> ==============================================================================
> ---
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
> (original)
> +++
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
> Fri Oct 11 23:47:10 2013
> @@ -20,43 +20,107 @@ package org.apache.openmeetings.test.sel
>
>  import java.util.List;
>
> +import org.apache.openmeetings.db.dao.label.FieldLanguagesValuesDao;
>  import org.junit.After;
>  import org.junit.Before;
> -import org.junit.Test;
> +import org.junit.runner.RunWith;
>  import org.openqa.selenium.Keys;
>  import org.openqa.selenium.WebDriver;
>  import org.openqa.selenium.WebElement;
>  import org.openqa.selenium.firefox.FirefoxDriver;
> +import org.openqa.selenium.firefox.FirefoxProfile;
> +import org.springframework.beans.factory.annotation.Autowired;
> +import org.springframework.test.context.ContextConfiguration;
> +import org.springframework.test.context.TestExecutionListeners;
> +import
> org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
> +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
> +
> +@RunWith(SpringJUnit4ClassRunner.class)
> +@TestExecutionListeners({})
> +@ContextConfiguration(locations={"classpath:openmeetings-applicationContext.xml"},
> inheritLocations = true)
> +public abstract class AbstractLoadTestDefaults extends
> AbstractJUnit4SpringContextTests {
> +
> +       @Autowired
> +       private FieldLanguagesValuesDao fieldLanguagesValuesDao;
>
> -public class TestSeleniumSmokeTest {
> +       public WebDriver driver = null;
> +
> +       private String BASE_URL = "http://localhost:5080/openmeetings";
> +       private String username = "swagner";
> +       private String userpass = "qweqwe";
> +       private String orgname = "seleniumtest";
> +       private String email = "selenium@openmeetings.apache.org";
> +       private String locale = "en-us";
>
> -       public static String BASE_URL = "
> http://localhost:5080/openmeetings";
> -       public static String username = "swagner";
> -       public static String userpass = "qweqwe";
> -       private static final String orgname = "seleniumtest";
> -       private static final String email = "
> selenium@openmeetings.apache.org";
>
> -       public WebDriver driver = null;
> +       public String getBASE_URL() {
> +               return BASE_URL;
> +       }
> +
> +       public String getUsername() {
> +               return username;
> +       }
> +
> +       public String getUserpass() {
> +               return userpass;
> +       }
> +
> +       public String getOrgname() {
> +               return orgname;
> +       }
> +
> +       public String getEmail() {
> +               return email;
> +       }
> +
> +       public Long getLanguageId() {
> +               return 1L;
> +       }
> +
> +       public String getLocale() {
> +               return locale;
> +       }
>
>         // setting this to false can be handy if you run the test from
> inside
>         // Eclipse, the browser will not shut down after the test so you
> can start
>         // to diagnose the test issue
>         public boolean doTearDownAfterTest = false;
> +
> +       public String getString(long id) {
> +               return fieldLanguagesValuesDao.getString(id,
> getLanguageId());
> +       }
> +
> +       /**
> +        * Make method overwrite possible to have custom behavior in tests
> +        *
> +        * @return
> +        */
> +       public boolean getDoTearDownAfterTest() {
> +               return doTearDownAfterTest;
> +       }
>
>         @Before
>         public void setUp() {
> -               driver = new FirefoxDriver();
> +               FirefoxProfile profile = new FirefoxProfile();
> +               profile.setPreference("intl.accept_languages",
> getLocale());
> +               driver = new FirefoxDriver(profile);
>         }
>
> -       @Test
> +       /**
> +        * This test is a basic test to verify the default loader
> mechanism works
> +        * it is not intend to be a part of any sub test
> +        *
> +        * @throws Exception
> +        */
> +       //@Test
>         public void smokeTest() throws Exception {
>                 try {
> -                       driver.get(BASE_URL);
> -
> -                       testWebSite();
> -
> -                       SeleniumUtils.inputText(driver, "login", username);
> -                       SeleniumUtils.inputText(driver, "pass", userpass);
> +                       driver.get(getBASE_URL());
> +
> +                       testIsInstalledAndDoInstallation();
> +
> +                       SeleniumUtils.inputText(driver, "login",
> getUsername());
> +                       SeleniumUtils.inputText(driver, "pass",
> getUserpass());
>
>                         WebElement signInButton =
> SeleniumUtils.findElement(driver,
>                                         "//button[span[contains(text(),
> 'Sign in')]]", true);
> @@ -71,90 +135,101 @@ public class TestSeleniumSmokeTest {
>                 }
>         }
>
> -       private void testWebSite() throws Exception {
> -
> -               WebElement wicketExtensionsWizardHeaderTitle =
> SeleniumUtils.findElement(driver,
> -                               "wicketExtensionsWizardHeaderTitle",
> false);
> +       /**
> +        * Throws exception in case that test fails, so it is important to
> not catch
> +        * that exception but really let the test fail!
> +        *
> +        * @throws Exception
> +        */
> +       protected void testIsInstalledAndDoInstallation() throws Exception
> {
> +
> +               WebElement wicketExtensionsWizardHeaderTitle =
> SeleniumUtils
> +                               .findElement(driver,
> "wicketExtensionsWizardHeaderTitle", false);
>                 if (wicketExtensionsWizardHeaderTitle == null) {
>                         return;
>                 }
> -               if
> (wicketExtensionsWizardHeaderTitle.getText().contains("Installation")) {
> +               if (wicketExtensionsWizardHeaderTitle.getText()
> +                               .contains("Installation")) {
>                         System.out.println("Do Installation");
>                         doInstallation();
>                 }
> -
> +
>         }
> -
> +
>         private void doInstallation() throws Exception {
>                 Thread.sleep(3000L);
> -
> -               List<WebElement> buttons_next =
> SeleniumUtils.findElements(driver, "buttons:next", true);
> -
> +
> +               List<WebElement> buttons_next =
> SeleniumUtils.findElements(driver,
> +                               "buttons:next", true);
> +
>                 buttons_next.get(1).sendKeys(Keys.RETURN);
> -
> +
>                 Thread.sleep(1000L);
> -
> -               SeleniumUtils.inputText(driver, "view:cfg.username",
> username);
> -               SeleniumUtils.inputText(driver, "view:cfg.password",
> userpass);
> -               SeleniumUtils.inputText(driver, "view:cfg.email", email);
> -               SeleniumUtils.inputText(driver, "view:cfg.group", orgname);
> -
> +
> +               SeleniumUtils.inputText(driver, "view:cfg.username",
> getUsername());
> +               SeleniumUtils.inputText(driver, "view:cfg.password",
> getUserpass());
> +               SeleniumUtils.inputText(driver, "view:cfg.email",
> getEmail());
> +               SeleniumUtils.inputText(driver, "view:cfg.group",
> getOrgname());
> +
>                 buttons_next = SeleniumUtils.findElements(driver,
> "buttons:next", true);
> -
> +
>                 buttons_next.get(1).sendKeys(Keys.RETURN);
> -
> +
>                 Thread.sleep(1000L);
> -
> +
>                 buttons_next = SeleniumUtils.findElements(driver,
> "buttons:next", true);
> -
> +
>                 buttons_next.get(1).sendKeys(Keys.RETURN);
> -
> +
>                 Thread.sleep(1000L);
> -
> +
>                 buttons_next = SeleniumUtils.findElements(driver,
> "buttons:next", true);
> -
> +
>                 buttons_next.get(1).sendKeys(Keys.RETURN);
> -
> +
>                 Thread.sleep(1000L);
> -
> +
>                 buttons_next = SeleniumUtils.findElements(driver,
> "buttons:next", true);
> -
> +
>                 buttons_next.get(1).sendKeys(Keys.RETURN);
> -
> +
>                 Thread.sleep(2000L);
> -
> -               List<WebElement> elements =
> SeleniumUtils.findElements(driver, "buttons:finish", true);
> -
> +
> +               List<WebElement> elements =
> SeleniumUtils.findElements(driver,
> +                               "buttons:finish", true);
> +
>                 elements.get(1).sendKeys(Keys.RETURN);
> -
> +
>                 long maxMilliSecondsWait = 120000;
> -
> +
>                 while (maxMilliSecondsWait > 0) {
> -
> -                       //check if installation is complete by searching
> for the link on the success page
> -                       WebElement enterApplicationLink =
> SeleniumUtils.findElement(driver,
> -
> "//a[contains(@href,'install')]", false);
> -
> +
> +                       // check if installation is complete by searching
> for the link on
> +                       // the success page
> +                       WebElement enterApplicationLink =
> SeleniumUtils.findElement(driver,
> +                                       "//a[contains(@href,'install')]",
> false);
> +
>                         if (enterApplicationLink == null) {
> -                               System.out.println("Installation running -
> wait 3 more seconds and check again");
> -
> +                               System.out
> +                                               .println("Installation
> running - wait 3 more seconds and check again");
> +
>                                 Thread.sleep(3000L);
>                                 maxMilliSecondsWait -= 3000;
>                         } else {
>                                 maxMilliSecondsWait = 0;
> -
> +
>                                 enterApplicationLink.click();
> -
> +
>                                 return;
>                         }
>                 }
> -
> +
>                 throw new Exception("Timeout during installation");
>         }
>
>         @After
>         public void tearDown() throws Exception {
> -               if (doTearDownAfterTest) {
> +               if (getDoTearDownAfterTest()) {
>                         driver.close();
>                         driver.quit();
>                 }
>
> Modified:
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
> URL:
> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java?rev=1531463&r1=1531462&r2=1531463&view=diff
>
> ==============================================================================
> ---
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
> (original)
> +++
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
> Fri Oct 11 23:47:10 2013
> @@ -42,6 +42,9 @@ public class SeleniumUtils {
>                         String inputText) throws Exception {
>                 WebElement element = SeleniumUtils.findElement(driver,
> search, true);
>
> +               //clear text before adding input
> +               element.clear();
> +
>                 // Would make send to check if this element is really an
> input text
>                 element.sendKeys(inputText);
>         }
> @@ -120,9 +123,6 @@ public class SeleniumUtils {
>         private static List<WebElement> _findElement(WebDriver driver,
> String search) {
>                 for (By by : _getSearchArray(search)) {
>                         try {
> -
> -
> -
>                                 List<WebElement> elements =
> driver.findElements(by);
>                                 if (elements != null && elements.size() >
> 0) {
>                                         return elements;
>
> Added:
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
> URL:
> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java?rev=1531463&view=auto
>
> ==============================================================================
> ---
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
> (added)
> +++
> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
> Fri Oct 11 23:47:10 2013
> @@ -0,0 +1,95 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License") +  you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + *   http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +package org.apache.openmeetings.test.selenium;
> +
> +import java.util.Date;
> +
> +import org.junit.Test;
> +import org.openqa.selenium.WebElement;
> +
> +public class TestSignUp extends AbstractLoadTestDefaults {
> +
> +       String pass = "pass";
> +
> +       @Override
> +       public boolean getDoTearDownAfterTest() {
> +               return false;
> +       }
> +
> +       @Test
> +       public void testSignUp() throws Exception {
> +               driver.get(getBASE_URL());
> +
> +               String currentRandomCounter = "" + ((new
> Date().getTime())/1000);
> +               String userName = "seba" + currentRandomCounter;
> +               String email = "hans." + currentRandomCounter + "@
> openmeetings.apache.org";
> +
> +               super.testIsInstalledAndDoInstallation();
> +
> +               WebElement signUpButton = SeleniumUtils.findElement(driver,
> +                               "//button[span[contains(text(), 'Not a
> member')]]", true);
> +               signUpButton.click();
> +
> +               // ##################################
> +               // Test validation message for passwords to be identical
> +               // ##################################
> +               doSignUp("Hans","Muster", userName, "pw", "pw2", email);
> +
> +               //Find Error label-id 232 "Please enter two identical
> passwords"
> +               SeleniumUtils.findElement(driver,
> "//span[@class='feedbackPanelERROR'][contains(text(), '" + getString(232) +
> "')]", true);
> +
> +
> +               // ##################################
> +               // Sign up with user and sign in
> +               // ##################################
> +               doSignUp("Hans","Muster", userName, pass, pass, email);
> +
> +               //Login with user
> +               SeleniumUtils.inputText(driver, "login", userName);
> +               SeleniumUtils.inputText(driver, "pass", pass);
> +
> +               //click labelid 112 "Sign In"
> +               WebElement signInButton = SeleniumUtils.findElement(driver,
> +                               "//button[span[contains(text(), '" +
> getString(112) + "')]]", true);
> +               signInButton.click();
> +
> +               // check for some text in dashbaord, labelid 281, "Help
> and support"
> +               SeleniumUtils.elementExists(driver,
> +                               "//h3[contains(text(), '" + getString(281)
> + "')]", true);
> +
> +               // ##################################
> +               // Sign up with same user and check duplicate user message
> +               // ##################################
> +       }
> +
> +       private void doSignUp(String firstName, String lastName, String
> login, String password,
> +                                       String confirmPassword, String
> email) throws Exception {
> +
> +               SeleniumUtils.inputText(driver, "firstName", firstName);
> +               SeleniumUtils.inputText(driver, "lastName", lastName);
> +               SeleniumUtils.inputText(driver, "//div[contains(@id,
> 'register')]//input[@name='login']", login);
> +               SeleniumUtils.inputText(driver, "password", password);
> +               SeleniumUtils.inputText(driver, "confirmPassword",
> confirmPassword);
> +               SeleniumUtils.inputText(driver, "email", email);
> +
> +               WebElement submitButton = SeleniumUtils.findElement(driver,
> +                               "//button[span[contains(text(),
> 'Register')]]", true);
> +               submitButton.click();
> +       }
> +}
>
>
>


-- 
WBR
Maxim aka solomax

Re: svn commit: r1531463 - in /openmeetings/trunk/singlewebapp: ./ src/test/java/org/apache/openmeetings/test/selenium/

Posted by Maxim Solodovnik <so...@gmail.com>.
great :)


On Sun, Oct 13, 2013 at 3:31 AM, seba.wagner@gmail.com <
seba.wagner@gmail.com> wrote:

> I have added the base class.
> The only other thing I did was renaming the existing class.
> "AbstractOpenMeetingsSpringTest" ... it does not do any Spring loading
> anymore.
> And I think the name "OpenMeetings" is already in the package path. You
> don't need it.
>
> Sebastian
>
>
> 2013/10/12 Maxim Solodovnik <so...@gmail.com>
>
>> Base class is a good option :)
>> To avoid DB creation you just need to override the setup method and not
>> call super.setup if you don't need to :)
>>
>>
>> On Sat, Oct 12, 2013 at 10:08 AM, seba.wagner@gmail.com <
>> seba.wagner@gmail.com> wrote:
>>
>>> I did thought about it but I did not do it.
>>> I don't want to extend that class because I don't want that the test
>>> will load any default values.
>>> The Selenium tests does use the web installer to install the defaults if
>>> it detects that there is a need to import anything.
>>>
>>> The only copy and paste line of code of those two classes is the
>>> annotation. And that is it.
>>> There is no other functionality in the AbstractOpenmeetingsSpringTest
>>> that we would use in the Selenium tests.
>>>
>>> I also don't know how it would behave if you have multiple "setUp"
>>> routines in the tests that overwrite each other.
>>>
>>> It might however make sense to create yet another base class and let
>>> both abstract classes inherit the spring annotations from it.
>>> That would be probably my preference if you want to get rid of those
>>> duplicate annotations.
>>>
>>> Sebastian
>>>
>>>
>>> 2013/10/12 Maxim Solodovnik <so...@gmail.com>
>>>
>>>> Hello Sebastian,
>>>>
>>>> Is it OK if I'll change AbstractTestDefaults to extend
>>>> AbstractOpenmeetingsSpringTest and remove unnecessary annotations?
>>>> I would like to avoid copy/pasted code as much as possible :)
>>>>
>>>>
>>>> On Sat, Oct 12, 2013 at 6:47 AM, <se...@apache.org> wrote:
>>>>
>>>>> Author: sebawagner
>>>>> Date: Fri Oct 11 23:47:10 2013
>>>>> New Revision: 1531463
>>>>>
>>>>> URL: http://svn.apache.org/r1531463
>>>>> Log:
>>>>> OPENMEETINGS-816 UI test to sign up, to be continued
>>>>> Added cglib to .classpath as you need it to run JUnit from inside
>>>>> Eclipse
>>>>>
>>>>> Added:
>>>>>
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
>>>>>       - copied, changed from r1529278,
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
>>>>>
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>>>>> Removed:
>>>>>
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
>>>>> Modified:
>>>>>     openmeetings/trunk/singlewebapp/.classpath
>>>>>
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>>>>>
>>>>> Modified: openmeetings/trunk/singlewebapp/.classpath
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/.classpath?rev=1531463&r1=1531462&r2=1531463&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- openmeetings/trunk/singlewebapp/.classpath (original)
>>>>> +++ openmeetings/trunk/singlewebapp/.classpath Fri Oct 11 23:47:10 2013
>>>>> @@ -1,23 +1,4 @@
>>>>>  <?xml version="1.0" encoding="UTF-8"?>
>>>>> -<!--
>>>>> -  Licensed to the Apache Software Foundation (ASF) under one
>>>>> -  or more contributor license agreements.  See the NOTICE file
>>>>> -  distributed with this work for additional information
>>>>> -  regarding copyright ownership.  The ASF licenses this file
>>>>> -  to you under the Apache License, Version 2.0 (the
>>>>> -  "License"); you may not use this file except in compliance
>>>>> -  with the License.  You may obtain a copy of the License at
>>>>> -
>>>>> -      http://www.apache.org/licenses/LICENSE-2.0
>>>>> -
>>>>> -  Unless required by applicable law or agreed to in writing,
>>>>> -  software distributed under the License is distributed on an
>>>>> -  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>>> -  KIND, either express or implied.  See the License for the
>>>>> -  specific language governing permissions and limitations
>>>>> -  under the License.
>>>>> -
>>>>> --->
>>>>>  <classpath>
>>>>>         <classpathentry kind="src" path="src/axis/java"/>
>>>>>         <classpathentry kind="src" path="src/db/java"/>
>>>>> @@ -64,5 +45,6 @@
>>>>>         <classpathentry kind="lib"
>>>>> path="build/red5/server/dist/lib/ehcache-core-2.5.0.jar"/>
>>>>>         <classpathentry kind="lib"
>>>>> path="build/red5/server/dist/plugins/tomcat-embed-core-7.0.41.jar"/>
>>>>>         <classpathentry kind="lib"
>>>>> path="build/red5/server/dist/lib/bcprov-jdk15on-1.47.jar"/>
>>>>> +       <classpathentry kind="lib"
>>>>> path="build/red5/server/dist/lib/cglib-nodep-2.2.2.jar"/>
>>>>>         <classpathentry kind="output" path="build/classes/eclipse"/>
>>>>>  </classpath>
>>>>>
>>>>> Copied:
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
>>>>> (from r1529278,
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java)
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java?p2=openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java&p1=openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java&r1=1529278&r2=1531463&rev=1531463&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> ---
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
>>>>> (original)
>>>>> +++
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
>>>>> Fri Oct 11 23:47:10 2013
>>>>> @@ -20,43 +20,107 @@ package org.apache.openmeetings.test.sel
>>>>>
>>>>>  import java.util.List;
>>>>>
>>>>> +import org.apache.openmeetings.db.dao.label.FieldLanguagesValuesDao;
>>>>>  import org.junit.After;
>>>>>  import org.junit.Before;
>>>>> -import org.junit.Test;
>>>>> +import org.junit.runner.RunWith;
>>>>>  import org.openqa.selenium.Keys;
>>>>>  import org.openqa.selenium.WebDriver;
>>>>>  import org.openqa.selenium.WebElement;
>>>>>  import org.openqa.selenium.firefox.FirefoxDriver;
>>>>> +import org.openqa.selenium.firefox.FirefoxProfile;
>>>>> +import org.springframework.beans.factory.annotation.Autowired;
>>>>> +import org.springframework.test.context.ContextConfiguration;
>>>>> +import org.springframework.test.context.TestExecutionListeners;
>>>>> +import
>>>>> org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
>>>>> +import
>>>>> org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
>>>>> +
>>>>> +@RunWith(SpringJUnit4ClassRunner.class)
>>>>> +@TestExecutionListeners({})
>>>>> +@ContextConfiguration(locations={"classpath:openmeetings-applicationContext.xml"},
>>>>> inheritLocations = true)
>>>>> +public abstract class AbstractLoadTestDefaults extends
>>>>> AbstractJUnit4SpringContextTests {
>>>>> +
>>>>> +       @Autowired
>>>>> +       private FieldLanguagesValuesDao fieldLanguagesValuesDao;
>>>>>
>>>>> -public class TestSeleniumSmokeTest {
>>>>> +       public WebDriver driver = null;
>>>>> +
>>>>> +       private String BASE_URL = "http://localhost:5080/openmeetings
>>>>> ";
>>>>> +       private String username = "swagner";
>>>>> +       private String userpass = "qweqwe";
>>>>> +       private String orgname = "seleniumtest";
>>>>> +       private String email = "selenium@openmeetings.apache.org";
>>>>> +       private String locale = "en-us";
>>>>>
>>>>> -       public static String BASE_URL = "
>>>>> http://localhost:5080/openmeetings";
>>>>> -       public static String username = "swagner";
>>>>> -       public static String userpass = "qweqwe";
>>>>> -       private static final String orgname = "seleniumtest";
>>>>> -       private static final String email = "
>>>>> selenium@openmeetings.apache.org";
>>>>>
>>>>> -       public WebDriver driver = null;
>>>>> +       public String getBASE_URL() {
>>>>> +               return BASE_URL;
>>>>> +       }
>>>>> +
>>>>> +       public String getUsername() {
>>>>> +               return username;
>>>>> +       }
>>>>> +
>>>>> +       public String getUserpass() {
>>>>> +               return userpass;
>>>>> +       }
>>>>> +
>>>>> +       public String getOrgname() {
>>>>> +               return orgname;
>>>>> +       }
>>>>> +
>>>>> +       public String getEmail() {
>>>>> +               return email;
>>>>> +       }
>>>>> +
>>>>> +       public Long getLanguageId() {
>>>>> +               return 1L;
>>>>> +       }
>>>>> +
>>>>> +       public String getLocale() {
>>>>> +               return locale;
>>>>> +       }
>>>>>
>>>>>         // setting this to false can be handy if you run the test from
>>>>> inside
>>>>>         // Eclipse, the browser will not shut down after the test so
>>>>> you can start
>>>>>         // to diagnose the test issue
>>>>>         public boolean doTearDownAfterTest = false;
>>>>> +
>>>>> +       public String getString(long id) {
>>>>> +               return fieldLanguagesValuesDao.getString(id,
>>>>> getLanguageId());
>>>>> +       }
>>>>> +
>>>>> +       /**
>>>>> +        * Make method overwrite possible to have custom behavior in
>>>>> tests
>>>>> +        *
>>>>> +        * @return
>>>>> +        */
>>>>> +       public boolean getDoTearDownAfterTest() {
>>>>> +               return doTearDownAfterTest;
>>>>> +       }
>>>>>
>>>>>         @Before
>>>>>         public void setUp() {
>>>>> -               driver = new FirefoxDriver();
>>>>> +               FirefoxProfile profile = new FirefoxProfile();
>>>>> +               profile.setPreference("intl.accept_languages",
>>>>> getLocale());
>>>>> +               driver = new FirefoxDriver(profile);
>>>>>         }
>>>>>
>>>>> -       @Test
>>>>> +       /**
>>>>> +        * This test is a basic test to verify the default loader
>>>>> mechanism works
>>>>> +        * it is not intend to be a part of any sub test
>>>>> +        *
>>>>> +        * @throws Exception
>>>>> +        */
>>>>> +       //@Test
>>>>>         public void smokeTest() throws Exception {
>>>>>                 try {
>>>>> -                       driver.get(BASE_URL);
>>>>> -
>>>>> -                       testWebSite();
>>>>> -
>>>>> -                       SeleniumUtils.inputText(driver, "login",
>>>>> username);
>>>>> -                       SeleniumUtils.inputText(driver, "pass",
>>>>> userpass);
>>>>> +                       driver.get(getBASE_URL());
>>>>> +
>>>>> +                       testIsInstalledAndDoInstallation();
>>>>> +
>>>>> +                       SeleniumUtils.inputText(driver, "login",
>>>>> getUsername());
>>>>> +                       SeleniumUtils.inputText(driver, "pass",
>>>>> getUserpass());
>>>>>
>>>>>                         WebElement signInButton =
>>>>> SeleniumUtils.findElement(driver,
>>>>>
>>>>> "//button[span[contains(text(), 'Sign in')]]", true);
>>>>> @@ -71,90 +135,101 @@ public class TestSeleniumSmokeTest {
>>>>>                 }
>>>>>         }
>>>>>
>>>>> -       private void testWebSite() throws Exception {
>>>>> -
>>>>> -               WebElement wicketExtensionsWizardHeaderTitle =
>>>>> SeleniumUtils.findElement(driver,
>>>>> -                               "wicketExtensionsWizardHeaderTitle",
>>>>> false);
>>>>> +       /**
>>>>> +        * Throws exception in case that test fails, so it is
>>>>> important to not catch
>>>>> +        * that exception but really let the test fail!
>>>>> +        *
>>>>> +        * @throws Exception
>>>>> +        */
>>>>> +       protected void testIsInstalledAndDoInstallation() throws
>>>>> Exception {
>>>>> +
>>>>> +               WebElement wicketExtensionsWizardHeaderTitle =
>>>>> SeleniumUtils
>>>>> +                               .findElement(driver,
>>>>> "wicketExtensionsWizardHeaderTitle", false);
>>>>>                 if (wicketExtensionsWizardHeaderTitle == null) {
>>>>>                         return;
>>>>>                 }
>>>>> -               if
>>>>> (wicketExtensionsWizardHeaderTitle.getText().contains("Installation")) {
>>>>> +               if (wicketExtensionsWizardHeaderTitle.getText()
>>>>> +                               .contains("Installation")) {
>>>>>                         System.out.println("Do Installation");
>>>>>                         doInstallation();
>>>>>                 }
>>>>> -
>>>>> +
>>>>>         }
>>>>> -
>>>>> +
>>>>>         private void doInstallation() throws Exception {
>>>>>                 Thread.sleep(3000L);
>>>>> -
>>>>> -               List<WebElement> buttons_next =
>>>>> SeleniumUtils.findElements(driver, "buttons:next", true);
>>>>> -
>>>>> +
>>>>> +               List<WebElement> buttons_next =
>>>>> SeleniumUtils.findElements(driver,
>>>>> +                               "buttons:next", true);
>>>>> +
>>>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>>>> -
>>>>> +
>>>>>                 Thread.sleep(1000L);
>>>>> -
>>>>> -               SeleniumUtils.inputText(driver, "view:cfg.username",
>>>>> username);
>>>>> -               SeleniumUtils.inputText(driver, "view:cfg.password",
>>>>> userpass);
>>>>> -               SeleniumUtils.inputText(driver, "view:cfg.email",
>>>>> email);
>>>>> -               SeleniumUtils.inputText(driver, "view:cfg.group",
>>>>> orgname);
>>>>> -
>>>>> +
>>>>> +               SeleniumUtils.inputText(driver, "view:cfg.username",
>>>>> getUsername());
>>>>> +               SeleniumUtils.inputText(driver, "view:cfg.password",
>>>>> getUserpass());
>>>>> +               SeleniumUtils.inputText(driver, "view:cfg.email",
>>>>> getEmail());
>>>>> +               SeleniumUtils.inputText(driver, "view:cfg.group",
>>>>> getOrgname());
>>>>> +
>>>>>                 buttons_next = SeleniumUtils.findElements(driver,
>>>>> "buttons:next", true);
>>>>> -
>>>>> +
>>>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>>>> -
>>>>> +
>>>>>                 Thread.sleep(1000L);
>>>>> -
>>>>> +
>>>>>                 buttons_next = SeleniumUtils.findElements(driver,
>>>>> "buttons:next", true);
>>>>> -
>>>>> +
>>>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>>>> -
>>>>> +
>>>>>                 Thread.sleep(1000L);
>>>>> -
>>>>> +
>>>>>                 buttons_next = SeleniumUtils.findElements(driver,
>>>>> "buttons:next", true);
>>>>> -
>>>>> +
>>>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>>>> -
>>>>> +
>>>>>                 Thread.sleep(1000L);
>>>>> -
>>>>> +
>>>>>                 buttons_next = SeleniumUtils.findElements(driver,
>>>>> "buttons:next", true);
>>>>> -
>>>>> +
>>>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>>>> -
>>>>> +
>>>>>                 Thread.sleep(2000L);
>>>>> -
>>>>> -               List<WebElement> elements =
>>>>> SeleniumUtils.findElements(driver, "buttons:finish", true);
>>>>> -
>>>>> +
>>>>> +               List<WebElement> elements =
>>>>> SeleniumUtils.findElements(driver,
>>>>> +                               "buttons:finish", true);
>>>>> +
>>>>>                 elements.get(1).sendKeys(Keys.RETURN);
>>>>> -
>>>>> +
>>>>>                 long maxMilliSecondsWait = 120000;
>>>>> -
>>>>> +
>>>>>                 while (maxMilliSecondsWait > 0) {
>>>>> -
>>>>> -                       //check if installation is complete by
>>>>> searching for the link on the success page
>>>>> -                       WebElement enterApplicationLink =
>>>>> SeleniumUtils.findElement(driver,
>>>>> -
>>>>> "//a[contains(@href,'install')]", false);
>>>>> -
>>>>> +
>>>>> +                       // check if installation is complete by
>>>>> searching for the link on
>>>>> +                       // the success page
>>>>> +                       WebElement enterApplicationLink =
>>>>> SeleniumUtils.findElement(driver,
>>>>> +
>>>>> "//a[contains(@href,'install')]", false);
>>>>> +
>>>>>                         if (enterApplicationLink == null) {
>>>>> -                               System.out.println("Installation
>>>>> running - wait 3 more seconds and check again");
>>>>> -
>>>>> +                               System.out
>>>>> +                                               .println("Installation
>>>>> running - wait 3 more seconds and check again");
>>>>> +
>>>>>                                 Thread.sleep(3000L);
>>>>>                                 maxMilliSecondsWait -= 3000;
>>>>>                         } else {
>>>>>                                 maxMilliSecondsWait = 0;
>>>>> -
>>>>> +
>>>>>                                 enterApplicationLink.click();
>>>>> -
>>>>> +
>>>>>                                 return;
>>>>>                         }
>>>>>                 }
>>>>> -
>>>>> +
>>>>>                 throw new Exception("Timeout during installation");
>>>>>         }
>>>>>
>>>>>         @After
>>>>>         public void tearDown() throws Exception {
>>>>> -               if (doTearDownAfterTest) {
>>>>> +               if (getDoTearDownAfterTest()) {
>>>>>                         driver.close();
>>>>>                         driver.quit();
>>>>>                 }
>>>>>
>>>>> Modified:
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java?rev=1531463&r1=1531462&r2=1531463&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> ---
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>>>>> (original)
>>>>> +++
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>>>>> Fri Oct 11 23:47:10 2013
>>>>> @@ -42,6 +42,9 @@ public class SeleniumUtils {
>>>>>                         String inputText) throws Exception {
>>>>>                 WebElement element = SeleniumUtils.findElement(driver,
>>>>> search, true);
>>>>>
>>>>> +               //clear text before adding input
>>>>> +               element.clear();
>>>>> +
>>>>>                 // Would make send to check if this element is really
>>>>> an input text
>>>>>                 element.sendKeys(inputText);
>>>>>         }
>>>>> @@ -120,9 +123,6 @@ public class SeleniumUtils {
>>>>>         private static List<WebElement> _findElement(WebDriver driver,
>>>>> String search) {
>>>>>                 for (By by : _getSearchArray(search)) {
>>>>>                         try {
>>>>> -
>>>>> -
>>>>> -
>>>>>                                 List<WebElement> elements =
>>>>> driver.findElements(by);
>>>>>                                 if (elements != null &&
>>>>> elements.size() > 0) {
>>>>>                                         return elements;
>>>>>
>>>>> Added:
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>>>>> URL:
>>>>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java?rev=1531463&view=auto
>>>>>
>>>>> ==============================================================================
>>>>> ---
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>>>>> (added)
>>>>> +++
>>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>>>>> Fri Oct 11 23:47:10 2013
>>>>> @@ -0,0 +1,95 @@
>>>>> +/*
>>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>>> + * or more contributor license agreements.  See the NOTICE file
>>>>> + * distributed with this work for additional information
>>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>>> + * to you under the Apache License, Version 2.0 (the
>>>>> + * "License") +  you may not use this file except in compliance
>>>>> + * with the License.  You may obtain a copy of the License at
>>>>> + *
>>>>> + *   http://www.apache.org/licenses/LICENSE-2.0
>>>>> + *
>>>>> + * Unless required by applicable law or agreed to in writing,
>>>>> + * software distributed under the License is distributed on an
>>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>>> + * KIND, either express or implied.  See the License for the
>>>>> + * specific language governing permissions and limitations
>>>>> + * under the License.
>>>>> + */
>>>>> +package org.apache.openmeetings.test.selenium;
>>>>> +
>>>>> +import java.util.Date;
>>>>> +
>>>>> +import org.junit.Test;
>>>>> +import org.openqa.selenium.WebElement;
>>>>> +
>>>>> +public class TestSignUp extends AbstractLoadTestDefaults {
>>>>> +
>>>>> +       String pass = "pass";
>>>>> +
>>>>> +       @Override
>>>>> +       public boolean getDoTearDownAfterTest() {
>>>>> +               return false;
>>>>> +       }
>>>>> +
>>>>> +       @Test
>>>>> +       public void testSignUp() throws Exception {
>>>>> +               driver.get(getBASE_URL());
>>>>> +
>>>>> +               String currentRandomCounter = "" + ((new
>>>>> Date().getTime())/1000);
>>>>> +               String userName = "seba" + currentRandomCounter;
>>>>> +               String email = "hans." + currentRandomCounter + "@
>>>>> openmeetings.apache.org";
>>>>> +
>>>>> +               super.testIsInstalledAndDoInstallation();
>>>>> +
>>>>> +               WebElement signUpButton =
>>>>> SeleniumUtils.findElement(driver,
>>>>> +                               "//button[span[contains(text(), 'Not a
>>>>> member')]]", true);
>>>>> +               signUpButton.click();
>>>>> +
>>>>> +               // ##################################
>>>>> +               // Test validation message for passwords to be
>>>>> identical
>>>>> +               // ##################################
>>>>> +               doSignUp("Hans","Muster", userName, "pw", "pw2",
>>>>> email);
>>>>> +
>>>>> +               //Find Error label-id 232 "Please enter two identical
>>>>> passwords"
>>>>> +               SeleniumUtils.findElement(driver,
>>>>> "//span[@class='feedbackPanelERROR'][contains(text(), '" + getString(232) +
>>>>> "')]", true);
>>>>> +
>>>>> +
>>>>> +               // ##################################
>>>>> +               // Sign up with user and sign in
>>>>> +               // ##################################
>>>>> +               doSignUp("Hans","Muster", userName, pass, pass, email);
>>>>> +
>>>>> +               //Login with user
>>>>> +               SeleniumUtils.inputText(driver, "login", userName);
>>>>> +               SeleniumUtils.inputText(driver, "pass", pass);
>>>>> +
>>>>> +               //click labelid 112 "Sign In"
>>>>> +               WebElement signInButton =
>>>>> SeleniumUtils.findElement(driver,
>>>>> +                               "//button[span[contains(text(), '" +
>>>>> getString(112) + "')]]", true);
>>>>> +               signInButton.click();
>>>>> +
>>>>> +               // check for some text in dashbaord, labelid 281,
>>>>> "Help and support"
>>>>> +               SeleniumUtils.elementExists(driver,
>>>>> +                               "//h3[contains(text(), '" +
>>>>> getString(281) + "')]", true);
>>>>> +
>>>>> +               // ##################################
>>>>> +               // Sign up with same user and check duplicate user
>>>>> message
>>>>> +               // ##################################
>>>>> +       }
>>>>> +
>>>>> +       private void doSignUp(String firstName, String lastName,
>>>>> String login, String password,
>>>>> +                                       String confirmPassword, String
>>>>> email) throws Exception {
>>>>> +
>>>>> +               SeleniumUtils.inputText(driver, "firstName",
>>>>> firstName);
>>>>> +               SeleniumUtils.inputText(driver, "lastName", lastName);
>>>>> +               SeleniumUtils.inputText(driver, "//div[contains(@id,
>>>>> 'register')]//input[@name='login']", login);
>>>>> +               SeleniumUtils.inputText(driver, "password", password);
>>>>> +               SeleniumUtils.inputText(driver, "confirmPassword",
>>>>> confirmPassword);
>>>>> +               SeleniumUtils.inputText(driver, "email", email);
>>>>> +
>>>>> +               WebElement submitButton =
>>>>> SeleniumUtils.findElement(driver,
>>>>> +                               "//button[span[contains(text(),
>>>>> 'Register')]]", true);
>>>>> +               submitButton.click();
>>>>> +       }
>>>>> +}
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> WBR
>>>> Maxim aka solomax
>>>>
>>>
>>>
>>>
>>> --
>>> Sebastian Wagner
>>> https://twitter.com/#!/dead_lock
>>> http://www.webbase-design.de
>>> http://www.wagner-sebastian.com
>>> seba.wagner@gmail.com
>>>
>>
>>
>>
>> --
>> WBR
>> Maxim aka solomax
>>
>
>
>
> --
> Sebastian Wagner
> https://twitter.com/#!/dead_lock
> http://www.webbase-design.de
> http://www.wagner-sebastian.com
> seba.wagner@gmail.com
>



-- 
WBR
Maxim aka solomax

Re: svn commit: r1531463 - in /openmeetings/trunk/singlewebapp: ./ src/test/java/org/apache/openmeetings/test/selenium/

Posted by "seba.wagner@gmail.com" <se...@gmail.com>.
I have added the base class.
The only other thing I did was renaming the existing class.
"AbstractOpenMeetingsSpringTest" ... it does not do any Spring loading
anymore.
And I think the name "OpenMeetings" is already in the package path. You
don't need it.

Sebastian


2013/10/12 Maxim Solodovnik <so...@gmail.com>

> Base class is a good option :)
> To avoid DB creation you just need to override the setup method and not
> call super.setup if you don't need to :)
>
>
> On Sat, Oct 12, 2013 at 10:08 AM, seba.wagner@gmail.com <
> seba.wagner@gmail.com> wrote:
>
>> I did thought about it but I did not do it.
>> I don't want to extend that class because I don't want that the test will
>> load any default values.
>> The Selenium tests does use the web installer to install the defaults if
>> it detects that there is a need to import anything.
>>
>> The only copy and paste line of code of those two classes is the
>> annotation. And that is it.
>> There is no other functionality in the AbstractOpenmeetingsSpringTest
>> that we would use in the Selenium tests.
>>
>> I also don't know how it would behave if you have multiple "setUp"
>> routines in the tests that overwrite each other.
>>
>> It might however make sense to create yet another base class and let both
>> abstract classes inherit the spring annotations from it.
>> That would be probably my preference if you want to get rid of those
>> duplicate annotations.
>>
>> Sebastian
>>
>>
>> 2013/10/12 Maxim Solodovnik <so...@gmail.com>
>>
>>> Hello Sebastian,
>>>
>>> Is it OK if I'll change AbstractTestDefaults to extend
>>> AbstractOpenmeetingsSpringTest and remove unnecessary annotations?
>>> I would like to avoid copy/pasted code as much as possible :)
>>>
>>>
>>> On Sat, Oct 12, 2013 at 6:47 AM, <se...@apache.org> wrote:
>>>
>>>> Author: sebawagner
>>>> Date: Fri Oct 11 23:47:10 2013
>>>> New Revision: 1531463
>>>>
>>>> URL: http://svn.apache.org/r1531463
>>>> Log:
>>>> OPENMEETINGS-816 UI test to sign up, to be continued
>>>> Added cglib to .classpath as you need it to run JUnit from inside
>>>> Eclipse
>>>>
>>>> Added:
>>>>
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
>>>>       - copied, changed from r1529278,
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
>>>>
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>>>> Removed:
>>>>
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
>>>> Modified:
>>>>     openmeetings/trunk/singlewebapp/.classpath
>>>>
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>>>>
>>>> Modified: openmeetings/trunk/singlewebapp/.classpath
>>>> URL:
>>>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/.classpath?rev=1531463&r1=1531462&r2=1531463&view=diff
>>>>
>>>> ==============================================================================
>>>> --- openmeetings/trunk/singlewebapp/.classpath (original)
>>>> +++ openmeetings/trunk/singlewebapp/.classpath Fri Oct 11 23:47:10 2013
>>>> @@ -1,23 +1,4 @@
>>>>  <?xml version="1.0" encoding="UTF-8"?>
>>>> -<!--
>>>> -  Licensed to the Apache Software Foundation (ASF) under one
>>>> -  or more contributor license agreements.  See the NOTICE file
>>>> -  distributed with this work for additional information
>>>> -  regarding copyright ownership.  The ASF licenses this file
>>>> -  to you under the Apache License, Version 2.0 (the
>>>> -  "License"); you may not use this file except in compliance
>>>> -  with the License.  You may obtain a copy of the License at
>>>> -
>>>> -      http://www.apache.org/licenses/LICENSE-2.0
>>>> -
>>>> -  Unless required by applicable law or agreed to in writing,
>>>> -  software distributed under the License is distributed on an
>>>> -  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>> -  KIND, either express or implied.  See the License for the
>>>> -  specific language governing permissions and limitations
>>>> -  under the License.
>>>> -
>>>> --->
>>>>  <classpath>
>>>>         <classpathentry kind="src" path="src/axis/java"/>
>>>>         <classpathentry kind="src" path="src/db/java"/>
>>>> @@ -64,5 +45,6 @@
>>>>         <classpathentry kind="lib"
>>>> path="build/red5/server/dist/lib/ehcache-core-2.5.0.jar"/>
>>>>         <classpathentry kind="lib"
>>>> path="build/red5/server/dist/plugins/tomcat-embed-core-7.0.41.jar"/>
>>>>         <classpathentry kind="lib"
>>>> path="build/red5/server/dist/lib/bcprov-jdk15on-1.47.jar"/>
>>>> +       <classpathentry kind="lib"
>>>> path="build/red5/server/dist/lib/cglib-nodep-2.2.2.jar"/>
>>>>         <classpathentry kind="output" path="build/classes/eclipse"/>
>>>>  </classpath>
>>>>
>>>> Copied:
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
>>>> (from r1529278,
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java)
>>>> URL:
>>>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java?p2=openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java&p1=openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java&r1=1529278&r2=1531463&rev=1531463&view=diff
>>>>
>>>> ==============================================================================
>>>> ---
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
>>>> (original)
>>>> +++
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
>>>> Fri Oct 11 23:47:10 2013
>>>> @@ -20,43 +20,107 @@ package org.apache.openmeetings.test.sel
>>>>
>>>>  import java.util.List;
>>>>
>>>> +import org.apache.openmeetings.db.dao.label.FieldLanguagesValuesDao;
>>>>  import org.junit.After;
>>>>  import org.junit.Before;
>>>> -import org.junit.Test;
>>>> +import org.junit.runner.RunWith;
>>>>  import org.openqa.selenium.Keys;
>>>>  import org.openqa.selenium.WebDriver;
>>>>  import org.openqa.selenium.WebElement;
>>>>  import org.openqa.selenium.firefox.FirefoxDriver;
>>>> +import org.openqa.selenium.firefox.FirefoxProfile;
>>>> +import org.springframework.beans.factory.annotation.Autowired;
>>>> +import org.springframework.test.context.ContextConfiguration;
>>>> +import org.springframework.test.context.TestExecutionListeners;
>>>> +import
>>>> org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
>>>> +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
>>>> +
>>>> +@RunWith(SpringJUnit4ClassRunner.class)
>>>> +@TestExecutionListeners({})
>>>> +@ContextConfiguration(locations={"classpath:openmeetings-applicationContext.xml"},
>>>> inheritLocations = true)
>>>> +public abstract class AbstractLoadTestDefaults extends
>>>> AbstractJUnit4SpringContextTests {
>>>> +
>>>> +       @Autowired
>>>> +       private FieldLanguagesValuesDao fieldLanguagesValuesDao;
>>>>
>>>> -public class TestSeleniumSmokeTest {
>>>> +       public WebDriver driver = null;
>>>> +
>>>> +       private String BASE_URL = "http://localhost:5080/openmeetings";
>>>> +       private String username = "swagner";
>>>> +       private String userpass = "qweqwe";
>>>> +       private String orgname = "seleniumtest";
>>>> +       private String email = "selenium@openmeetings.apache.org";
>>>> +       private String locale = "en-us";
>>>>
>>>> -       public static String BASE_URL = "
>>>> http://localhost:5080/openmeetings";
>>>> -       public static String username = "swagner";
>>>> -       public static String userpass = "qweqwe";
>>>> -       private static final String orgname = "seleniumtest";
>>>> -       private static final String email = "
>>>> selenium@openmeetings.apache.org";
>>>>
>>>> -       public WebDriver driver = null;
>>>> +       public String getBASE_URL() {
>>>> +               return BASE_URL;
>>>> +       }
>>>> +
>>>> +       public String getUsername() {
>>>> +               return username;
>>>> +       }
>>>> +
>>>> +       public String getUserpass() {
>>>> +               return userpass;
>>>> +       }
>>>> +
>>>> +       public String getOrgname() {
>>>> +               return orgname;
>>>> +       }
>>>> +
>>>> +       public String getEmail() {
>>>> +               return email;
>>>> +       }
>>>> +
>>>> +       public Long getLanguageId() {
>>>> +               return 1L;
>>>> +       }
>>>> +
>>>> +       public String getLocale() {
>>>> +               return locale;
>>>> +       }
>>>>
>>>>         // setting this to false can be handy if you run the test from
>>>> inside
>>>>         // Eclipse, the browser will not shut down after the test so
>>>> you can start
>>>>         // to diagnose the test issue
>>>>         public boolean doTearDownAfterTest = false;
>>>> +
>>>> +       public String getString(long id) {
>>>> +               return fieldLanguagesValuesDao.getString(id,
>>>> getLanguageId());
>>>> +       }
>>>> +
>>>> +       /**
>>>> +        * Make method overwrite possible to have custom behavior in
>>>> tests
>>>> +        *
>>>> +        * @return
>>>> +        */
>>>> +       public boolean getDoTearDownAfterTest() {
>>>> +               return doTearDownAfterTest;
>>>> +       }
>>>>
>>>>         @Before
>>>>         public void setUp() {
>>>> -               driver = new FirefoxDriver();
>>>> +               FirefoxProfile profile = new FirefoxProfile();
>>>> +               profile.setPreference("intl.accept_languages",
>>>> getLocale());
>>>> +               driver = new FirefoxDriver(profile);
>>>>         }
>>>>
>>>> -       @Test
>>>> +       /**
>>>> +        * This test is a basic test to verify the default loader
>>>> mechanism works
>>>> +        * it is not intend to be a part of any sub test
>>>> +        *
>>>> +        * @throws Exception
>>>> +        */
>>>> +       //@Test
>>>>         public void smokeTest() throws Exception {
>>>>                 try {
>>>> -                       driver.get(BASE_URL);
>>>> -
>>>> -                       testWebSite();
>>>> -
>>>> -                       SeleniumUtils.inputText(driver, "login",
>>>> username);
>>>> -                       SeleniumUtils.inputText(driver, "pass",
>>>> userpass);
>>>> +                       driver.get(getBASE_URL());
>>>> +
>>>> +                       testIsInstalledAndDoInstallation();
>>>> +
>>>> +                       SeleniumUtils.inputText(driver, "login",
>>>> getUsername());
>>>> +                       SeleniumUtils.inputText(driver, "pass",
>>>> getUserpass());
>>>>
>>>>                         WebElement signInButton =
>>>> SeleniumUtils.findElement(driver,
>>>>                                         "//button[span[contains(text(),
>>>> 'Sign in')]]", true);
>>>> @@ -71,90 +135,101 @@ public class TestSeleniumSmokeTest {
>>>>                 }
>>>>         }
>>>>
>>>> -       private void testWebSite() throws Exception {
>>>> -
>>>> -               WebElement wicketExtensionsWizardHeaderTitle =
>>>> SeleniumUtils.findElement(driver,
>>>> -                               "wicketExtensionsWizardHeaderTitle",
>>>> false);
>>>> +       /**
>>>> +        * Throws exception in case that test fails, so it is important
>>>> to not catch
>>>> +        * that exception but really let the test fail!
>>>> +        *
>>>> +        * @throws Exception
>>>> +        */
>>>> +       protected void testIsInstalledAndDoInstallation() throws
>>>> Exception {
>>>> +
>>>> +               WebElement wicketExtensionsWizardHeaderTitle =
>>>> SeleniumUtils
>>>> +                               .findElement(driver,
>>>> "wicketExtensionsWizardHeaderTitle", false);
>>>>                 if (wicketExtensionsWizardHeaderTitle == null) {
>>>>                         return;
>>>>                 }
>>>> -               if
>>>> (wicketExtensionsWizardHeaderTitle.getText().contains("Installation")) {
>>>> +               if (wicketExtensionsWizardHeaderTitle.getText()
>>>> +                               .contains("Installation")) {
>>>>                         System.out.println("Do Installation");
>>>>                         doInstallation();
>>>>                 }
>>>> -
>>>> +
>>>>         }
>>>> -
>>>> +
>>>>         private void doInstallation() throws Exception {
>>>>                 Thread.sleep(3000L);
>>>> -
>>>> -               List<WebElement> buttons_next =
>>>> SeleniumUtils.findElements(driver, "buttons:next", true);
>>>> -
>>>> +
>>>> +               List<WebElement> buttons_next =
>>>> SeleniumUtils.findElements(driver,
>>>> +                               "buttons:next", true);
>>>> +
>>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>>> -
>>>> +
>>>>                 Thread.sleep(1000L);
>>>> -
>>>> -               SeleniumUtils.inputText(driver, "view:cfg.username",
>>>> username);
>>>> -               SeleniumUtils.inputText(driver, "view:cfg.password",
>>>> userpass);
>>>> -               SeleniumUtils.inputText(driver, "view:cfg.email",
>>>> email);
>>>> -               SeleniumUtils.inputText(driver, "view:cfg.group",
>>>> orgname);
>>>> -
>>>> +
>>>> +               SeleniumUtils.inputText(driver, "view:cfg.username",
>>>> getUsername());
>>>> +               SeleniumUtils.inputText(driver, "view:cfg.password",
>>>> getUserpass());
>>>> +               SeleniumUtils.inputText(driver, "view:cfg.email",
>>>> getEmail());
>>>> +               SeleniumUtils.inputText(driver, "view:cfg.group",
>>>> getOrgname());
>>>> +
>>>>                 buttons_next = SeleniumUtils.findElements(driver,
>>>> "buttons:next", true);
>>>> -
>>>> +
>>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>>> -
>>>> +
>>>>                 Thread.sleep(1000L);
>>>> -
>>>> +
>>>>                 buttons_next = SeleniumUtils.findElements(driver,
>>>> "buttons:next", true);
>>>> -
>>>> +
>>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>>> -
>>>> +
>>>>                 Thread.sleep(1000L);
>>>> -
>>>> +
>>>>                 buttons_next = SeleniumUtils.findElements(driver,
>>>> "buttons:next", true);
>>>> -
>>>> +
>>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>>> -
>>>> +
>>>>                 Thread.sleep(1000L);
>>>> -
>>>> +
>>>>                 buttons_next = SeleniumUtils.findElements(driver,
>>>> "buttons:next", true);
>>>> -
>>>> +
>>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>>> -
>>>> +
>>>>                 Thread.sleep(2000L);
>>>> -
>>>> -               List<WebElement> elements =
>>>> SeleniumUtils.findElements(driver, "buttons:finish", true);
>>>> -
>>>> +
>>>> +               List<WebElement> elements =
>>>> SeleniumUtils.findElements(driver,
>>>> +                               "buttons:finish", true);
>>>> +
>>>>                 elements.get(1).sendKeys(Keys.RETURN);
>>>> -
>>>> +
>>>>                 long maxMilliSecondsWait = 120000;
>>>> -
>>>> +
>>>>                 while (maxMilliSecondsWait > 0) {
>>>> -
>>>> -                       //check if installation is complete by
>>>> searching for the link on the success page
>>>> -                       WebElement enterApplicationLink =
>>>> SeleniumUtils.findElement(driver,
>>>> -
>>>> "//a[contains(@href,'install')]", false);
>>>> -
>>>> +
>>>> +                       // check if installation is complete by
>>>> searching for the link on
>>>> +                       // the success page
>>>> +                       WebElement enterApplicationLink =
>>>> SeleniumUtils.findElement(driver,
>>>> +
>>>> "//a[contains(@href,'install')]", false);
>>>> +
>>>>                         if (enterApplicationLink == null) {
>>>> -                               System.out.println("Installation
>>>> running - wait 3 more seconds and check again");
>>>> -
>>>> +                               System.out
>>>> +                                               .println("Installation
>>>> running - wait 3 more seconds and check again");
>>>> +
>>>>                                 Thread.sleep(3000L);
>>>>                                 maxMilliSecondsWait -= 3000;
>>>>                         } else {
>>>>                                 maxMilliSecondsWait = 0;
>>>> -
>>>> +
>>>>                                 enterApplicationLink.click();
>>>> -
>>>> +
>>>>                                 return;
>>>>                         }
>>>>                 }
>>>> -
>>>> +
>>>>                 throw new Exception("Timeout during installation");
>>>>         }
>>>>
>>>>         @After
>>>>         public void tearDown() throws Exception {
>>>> -               if (doTearDownAfterTest) {
>>>> +               if (getDoTearDownAfterTest()) {
>>>>                         driver.close();
>>>>                         driver.quit();
>>>>                 }
>>>>
>>>> Modified:
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>>>> URL:
>>>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java?rev=1531463&r1=1531462&r2=1531463&view=diff
>>>>
>>>> ==============================================================================
>>>> ---
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>>>> (original)
>>>> +++
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>>>> Fri Oct 11 23:47:10 2013
>>>> @@ -42,6 +42,9 @@ public class SeleniumUtils {
>>>>                         String inputText) throws Exception {
>>>>                 WebElement element = SeleniumUtils.findElement(driver,
>>>> search, true);
>>>>
>>>> +               //clear text before adding input
>>>> +               element.clear();
>>>> +
>>>>                 // Would make send to check if this element is really
>>>> an input text
>>>>                 element.sendKeys(inputText);
>>>>         }
>>>> @@ -120,9 +123,6 @@ public class SeleniumUtils {
>>>>         private static List<WebElement> _findElement(WebDriver driver,
>>>> String search) {
>>>>                 for (By by : _getSearchArray(search)) {
>>>>                         try {
>>>> -
>>>> -
>>>> -
>>>>                                 List<WebElement> elements =
>>>> driver.findElements(by);
>>>>                                 if (elements != null && elements.size()
>>>> > 0) {
>>>>                                         return elements;
>>>>
>>>> Added:
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>>>> URL:
>>>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java?rev=1531463&view=auto
>>>>
>>>> ==============================================================================
>>>> ---
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>>>> (added)
>>>> +++
>>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>>>> Fri Oct 11 23:47:10 2013
>>>> @@ -0,0 +1,95 @@
>>>> +/*
>>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>>> + * or more contributor license agreements.  See the NOTICE file
>>>> + * distributed with this work for additional information
>>>> + * regarding copyright ownership.  The ASF licenses this file
>>>> + * to you under the Apache License, Version 2.0 (the
>>>> + * "License") +  you may not use this file except in compliance
>>>> + * with the License.  You may obtain a copy of the License at
>>>> + *
>>>> + *   http://www.apache.org/licenses/LICENSE-2.0
>>>> + *
>>>> + * Unless required by applicable law or agreed to in writing,
>>>> + * software distributed under the License is distributed on an
>>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>>> + * KIND, either express or implied.  See the License for the
>>>> + * specific language governing permissions and limitations
>>>> + * under the License.
>>>> + */
>>>> +package org.apache.openmeetings.test.selenium;
>>>> +
>>>> +import java.util.Date;
>>>> +
>>>> +import org.junit.Test;
>>>> +import org.openqa.selenium.WebElement;
>>>> +
>>>> +public class TestSignUp extends AbstractLoadTestDefaults {
>>>> +
>>>> +       String pass = "pass";
>>>> +
>>>> +       @Override
>>>> +       public boolean getDoTearDownAfterTest() {
>>>> +               return false;
>>>> +       }
>>>> +
>>>> +       @Test
>>>> +       public void testSignUp() throws Exception {
>>>> +               driver.get(getBASE_URL());
>>>> +
>>>> +               String currentRandomCounter = "" + ((new
>>>> Date().getTime())/1000);
>>>> +               String userName = "seba" + currentRandomCounter;
>>>> +               String email = "hans." + currentRandomCounter + "@
>>>> openmeetings.apache.org";
>>>> +
>>>> +               super.testIsInstalledAndDoInstallation();
>>>> +
>>>> +               WebElement signUpButton =
>>>> SeleniumUtils.findElement(driver,
>>>> +                               "//button[span[contains(text(), 'Not a
>>>> member')]]", true);
>>>> +               signUpButton.click();
>>>> +
>>>> +               // ##################################
>>>> +               // Test validation message for passwords to be identical
>>>> +               // ##################################
>>>> +               doSignUp("Hans","Muster", userName, "pw", "pw2", email);
>>>> +
>>>> +               //Find Error label-id 232 "Please enter two identical
>>>> passwords"
>>>> +               SeleniumUtils.findElement(driver,
>>>> "//span[@class='feedbackPanelERROR'][contains(text(), '" + getString(232) +
>>>> "')]", true);
>>>> +
>>>> +
>>>> +               // ##################################
>>>> +               // Sign up with user and sign in
>>>> +               // ##################################
>>>> +               doSignUp("Hans","Muster", userName, pass, pass, email);
>>>> +
>>>> +               //Login with user
>>>> +               SeleniumUtils.inputText(driver, "login", userName);
>>>> +               SeleniumUtils.inputText(driver, "pass", pass);
>>>> +
>>>> +               //click labelid 112 "Sign In"
>>>> +               WebElement signInButton =
>>>> SeleniumUtils.findElement(driver,
>>>> +                               "//button[span[contains(text(), '" +
>>>> getString(112) + "')]]", true);
>>>> +               signInButton.click();
>>>> +
>>>> +               // check for some text in dashbaord, labelid 281, "Help
>>>> and support"
>>>> +               SeleniumUtils.elementExists(driver,
>>>> +                               "//h3[contains(text(), '" +
>>>> getString(281) + "')]", true);
>>>> +
>>>> +               // ##################################
>>>> +               // Sign up with same user and check duplicate user
>>>> message
>>>> +               // ##################################
>>>> +       }
>>>> +
>>>> +       private void doSignUp(String firstName, String lastName, String
>>>> login, String password,
>>>> +                                       String confirmPassword, String
>>>> email) throws Exception {
>>>> +
>>>> +               SeleniumUtils.inputText(driver, "firstName", firstName);
>>>> +               SeleniumUtils.inputText(driver, "lastName", lastName);
>>>> +               SeleniumUtils.inputText(driver, "//div[contains(@id,
>>>> 'register')]//input[@name='login']", login);
>>>> +               SeleniumUtils.inputText(driver, "password", password);
>>>> +               SeleniumUtils.inputText(driver, "confirmPassword",
>>>> confirmPassword);
>>>> +               SeleniumUtils.inputText(driver, "email", email);
>>>> +
>>>> +               WebElement submitButton =
>>>> SeleniumUtils.findElement(driver,
>>>> +                               "//button[span[contains(text(),
>>>> 'Register')]]", true);
>>>> +               submitButton.click();
>>>> +       }
>>>> +}
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> WBR
>>> Maxim aka solomax
>>>
>>
>>
>>
>> --
>> Sebastian Wagner
>> https://twitter.com/#!/dead_lock
>> http://www.webbase-design.de
>> http://www.wagner-sebastian.com
>> seba.wagner@gmail.com
>>
>
>
>
> --
> WBR
> Maxim aka solomax
>



-- 
Sebastian Wagner
https://twitter.com/#!/dead_lock
http://www.webbase-design.de
http://www.wagner-sebastian.com
seba.wagner@gmail.com

Re: svn commit: r1531463 - in /openmeetings/trunk/singlewebapp: ./ src/test/java/org/apache/openmeetings/test/selenium/

Posted by Maxim Solodovnik <so...@gmail.com>.
Base class is a good option :)
To avoid DB creation you just need to override the setup method and not
call super.setup if you don't need to :)


On Sat, Oct 12, 2013 at 10:08 AM, seba.wagner@gmail.com <
seba.wagner@gmail.com> wrote:

> I did thought about it but I did not do it.
> I don't want to extend that class because I don't want that the test will
> load any default values.
> The Selenium tests does use the web installer to install the defaults if
> it detects that there is a need to import anything.
>
> The only copy and paste line of code of those two classes is the
> annotation. And that is it.
> There is no other functionality in the AbstractOpenmeetingsSpringTest that
> we would use in the Selenium tests.
>
> I also don't know how it would behave if you have multiple "setUp"
> routines in the tests that overwrite each other.
>
> It might however make sense to create yet another base class and let both
> abstract classes inherit the spring annotations from it.
> That would be probably my preference if you want to get rid of those
> duplicate annotations.
>
> Sebastian
>
>
> 2013/10/12 Maxim Solodovnik <so...@gmail.com>
>
>> Hello Sebastian,
>>
>> Is it OK if I'll change AbstractTestDefaults to extend
>> AbstractOpenmeetingsSpringTest and remove unnecessary annotations?
>> I would like to avoid copy/pasted code as much as possible :)
>>
>>
>> On Sat, Oct 12, 2013 at 6:47 AM, <se...@apache.org> wrote:
>>
>>> Author: sebawagner
>>> Date: Fri Oct 11 23:47:10 2013
>>> New Revision: 1531463
>>>
>>> URL: http://svn.apache.org/r1531463
>>> Log:
>>> OPENMEETINGS-816 UI test to sign up, to be continued
>>> Added cglib to .classpath as you need it to run JUnit from inside Eclipse
>>>
>>> Added:
>>>
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
>>>       - copied, changed from r1529278,
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
>>>
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>>> Removed:
>>>
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
>>> Modified:
>>>     openmeetings/trunk/singlewebapp/.classpath
>>>
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>>>
>>> Modified: openmeetings/trunk/singlewebapp/.classpath
>>> URL:
>>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/.classpath?rev=1531463&r1=1531462&r2=1531463&view=diff
>>>
>>> ==============================================================================
>>> --- openmeetings/trunk/singlewebapp/.classpath (original)
>>> +++ openmeetings/trunk/singlewebapp/.classpath Fri Oct 11 23:47:10 2013
>>> @@ -1,23 +1,4 @@
>>>  <?xml version="1.0" encoding="UTF-8"?>
>>> -<!--
>>> -  Licensed to the Apache Software Foundation (ASF) under one
>>> -  or more contributor license agreements.  See the NOTICE file
>>> -  distributed with this work for additional information
>>> -  regarding copyright ownership.  The ASF licenses this file
>>> -  to you under the Apache License, Version 2.0 (the
>>> -  "License"); you may not use this file except in compliance
>>> -  with the License.  You may obtain a copy of the License at
>>> -
>>> -      http://www.apache.org/licenses/LICENSE-2.0
>>> -
>>> -  Unless required by applicable law or agreed to in writing,
>>> -  software distributed under the License is distributed on an
>>> -  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> -  KIND, either express or implied.  See the License for the
>>> -  specific language governing permissions and limitations
>>> -  under the License.
>>> -
>>> --->
>>>  <classpath>
>>>         <classpathentry kind="src" path="src/axis/java"/>
>>>         <classpathentry kind="src" path="src/db/java"/>
>>> @@ -64,5 +45,6 @@
>>>         <classpathentry kind="lib"
>>> path="build/red5/server/dist/lib/ehcache-core-2.5.0.jar"/>
>>>         <classpathentry kind="lib"
>>> path="build/red5/server/dist/plugins/tomcat-embed-core-7.0.41.jar"/>
>>>         <classpathentry kind="lib"
>>> path="build/red5/server/dist/lib/bcprov-jdk15on-1.47.jar"/>
>>> +       <classpathentry kind="lib"
>>> path="build/red5/server/dist/lib/cglib-nodep-2.2.2.jar"/>
>>>         <classpathentry kind="output" path="build/classes/eclipse"/>
>>>  </classpath>
>>>
>>> Copied:
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
>>> (from r1529278,
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java)
>>> URL:
>>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java?p2=openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java&p1=openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java&r1=1529278&r2=1531463&rev=1531463&view=diff
>>>
>>> ==============================================================================
>>> ---
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
>>> (original)
>>> +++
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
>>> Fri Oct 11 23:47:10 2013
>>> @@ -20,43 +20,107 @@ package org.apache.openmeetings.test.sel
>>>
>>>  import java.util.List;
>>>
>>> +import org.apache.openmeetings.db.dao.label.FieldLanguagesValuesDao;
>>>  import org.junit.After;
>>>  import org.junit.Before;
>>> -import org.junit.Test;
>>> +import org.junit.runner.RunWith;
>>>  import org.openqa.selenium.Keys;
>>>  import org.openqa.selenium.WebDriver;
>>>  import org.openqa.selenium.WebElement;
>>>  import org.openqa.selenium.firefox.FirefoxDriver;
>>> +import org.openqa.selenium.firefox.FirefoxProfile;
>>> +import org.springframework.beans.factory.annotation.Autowired;
>>> +import org.springframework.test.context.ContextConfiguration;
>>> +import org.springframework.test.context.TestExecutionListeners;
>>> +import
>>> org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
>>> +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
>>> +
>>> +@RunWith(SpringJUnit4ClassRunner.class)
>>> +@TestExecutionListeners({})
>>> +@ContextConfiguration(locations={"classpath:openmeetings-applicationContext.xml"},
>>> inheritLocations = true)
>>> +public abstract class AbstractLoadTestDefaults extends
>>> AbstractJUnit4SpringContextTests {
>>> +
>>> +       @Autowired
>>> +       private FieldLanguagesValuesDao fieldLanguagesValuesDao;
>>>
>>> -public class TestSeleniumSmokeTest {
>>> +       public WebDriver driver = null;
>>> +
>>> +       private String BASE_URL = "http://localhost:5080/openmeetings";
>>> +       private String username = "swagner";
>>> +       private String userpass = "qweqwe";
>>> +       private String orgname = "seleniumtest";
>>> +       private String email = "selenium@openmeetings.apache.org";
>>> +       private String locale = "en-us";
>>>
>>> -       public static String BASE_URL = "
>>> http://localhost:5080/openmeetings";
>>> -       public static String username = "swagner";
>>> -       public static String userpass = "qweqwe";
>>> -       private static final String orgname = "seleniumtest";
>>> -       private static final String email = "
>>> selenium@openmeetings.apache.org";
>>>
>>> -       public WebDriver driver = null;
>>> +       public String getBASE_URL() {
>>> +               return BASE_URL;
>>> +       }
>>> +
>>> +       public String getUsername() {
>>> +               return username;
>>> +       }
>>> +
>>> +       public String getUserpass() {
>>> +               return userpass;
>>> +       }
>>> +
>>> +       public String getOrgname() {
>>> +               return orgname;
>>> +       }
>>> +
>>> +       public String getEmail() {
>>> +               return email;
>>> +       }
>>> +
>>> +       public Long getLanguageId() {
>>> +               return 1L;
>>> +       }
>>> +
>>> +       public String getLocale() {
>>> +               return locale;
>>> +       }
>>>
>>>         // setting this to false can be handy if you run the test from
>>> inside
>>>         // Eclipse, the browser will not shut down after the test so you
>>> can start
>>>         // to diagnose the test issue
>>>         public boolean doTearDownAfterTest = false;
>>> +
>>> +       public String getString(long id) {
>>> +               return fieldLanguagesValuesDao.getString(id,
>>> getLanguageId());
>>> +       }
>>> +
>>> +       /**
>>> +        * Make method overwrite possible to have custom behavior in
>>> tests
>>> +        *
>>> +        * @return
>>> +        */
>>> +       public boolean getDoTearDownAfterTest() {
>>> +               return doTearDownAfterTest;
>>> +       }
>>>
>>>         @Before
>>>         public void setUp() {
>>> -               driver = new FirefoxDriver();
>>> +               FirefoxProfile profile = new FirefoxProfile();
>>> +               profile.setPreference("intl.accept_languages",
>>> getLocale());
>>> +               driver = new FirefoxDriver(profile);
>>>         }
>>>
>>> -       @Test
>>> +       /**
>>> +        * This test is a basic test to verify the default loader
>>> mechanism works
>>> +        * it is not intend to be a part of any sub test
>>> +        *
>>> +        * @throws Exception
>>> +        */
>>> +       //@Test
>>>         public void smokeTest() throws Exception {
>>>                 try {
>>> -                       driver.get(BASE_URL);
>>> -
>>> -                       testWebSite();
>>> -
>>> -                       SeleniumUtils.inputText(driver, "login",
>>> username);
>>> -                       SeleniumUtils.inputText(driver, "pass",
>>> userpass);
>>> +                       driver.get(getBASE_URL());
>>> +
>>> +                       testIsInstalledAndDoInstallation();
>>> +
>>> +                       SeleniumUtils.inputText(driver, "login",
>>> getUsername());
>>> +                       SeleniumUtils.inputText(driver, "pass",
>>> getUserpass());
>>>
>>>                         WebElement signInButton =
>>> SeleniumUtils.findElement(driver,
>>>                                         "//button[span[contains(text(),
>>> 'Sign in')]]", true);
>>> @@ -71,90 +135,101 @@ public class TestSeleniumSmokeTest {
>>>                 }
>>>         }
>>>
>>> -       private void testWebSite() throws Exception {
>>> -
>>> -               WebElement wicketExtensionsWizardHeaderTitle =
>>> SeleniumUtils.findElement(driver,
>>> -                               "wicketExtensionsWizardHeaderTitle",
>>> false);
>>> +       /**
>>> +        * Throws exception in case that test fails, so it is important
>>> to not catch
>>> +        * that exception but really let the test fail!
>>> +        *
>>> +        * @throws Exception
>>> +        */
>>> +       protected void testIsInstalledAndDoInstallation() throws
>>> Exception {
>>> +
>>> +               WebElement wicketExtensionsWizardHeaderTitle =
>>> SeleniumUtils
>>> +                               .findElement(driver,
>>> "wicketExtensionsWizardHeaderTitle", false);
>>>                 if (wicketExtensionsWizardHeaderTitle == null) {
>>>                         return;
>>>                 }
>>> -               if
>>> (wicketExtensionsWizardHeaderTitle.getText().contains("Installation")) {
>>> +               if (wicketExtensionsWizardHeaderTitle.getText()
>>> +                               .contains("Installation")) {
>>>                         System.out.println("Do Installation");
>>>                         doInstallation();
>>>                 }
>>> -
>>> +
>>>         }
>>> -
>>> +
>>>         private void doInstallation() throws Exception {
>>>                 Thread.sleep(3000L);
>>> -
>>> -               List<WebElement> buttons_next =
>>> SeleniumUtils.findElements(driver, "buttons:next", true);
>>> -
>>> +
>>> +               List<WebElement> buttons_next =
>>> SeleniumUtils.findElements(driver,
>>> +                               "buttons:next", true);
>>> +
>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>> -
>>> +
>>>                 Thread.sleep(1000L);
>>> -
>>> -               SeleniumUtils.inputText(driver, "view:cfg.username",
>>> username);
>>> -               SeleniumUtils.inputText(driver, "view:cfg.password",
>>> userpass);
>>> -               SeleniumUtils.inputText(driver, "view:cfg.email", email);
>>> -               SeleniumUtils.inputText(driver, "view:cfg.group",
>>> orgname);
>>> -
>>> +
>>> +               SeleniumUtils.inputText(driver, "view:cfg.username",
>>> getUsername());
>>> +               SeleniumUtils.inputText(driver, "view:cfg.password",
>>> getUserpass());
>>> +               SeleniumUtils.inputText(driver, "view:cfg.email",
>>> getEmail());
>>> +               SeleniumUtils.inputText(driver, "view:cfg.group",
>>> getOrgname());
>>> +
>>>                 buttons_next = SeleniumUtils.findElements(driver,
>>> "buttons:next", true);
>>> -
>>> +
>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>> -
>>> +
>>>                 Thread.sleep(1000L);
>>> -
>>> +
>>>                 buttons_next = SeleniumUtils.findElements(driver,
>>> "buttons:next", true);
>>> -
>>> +
>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>> -
>>> +
>>>                 Thread.sleep(1000L);
>>> -
>>> +
>>>                 buttons_next = SeleniumUtils.findElements(driver,
>>> "buttons:next", true);
>>> -
>>> +
>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>> -
>>> +
>>>                 Thread.sleep(1000L);
>>> -
>>> +
>>>                 buttons_next = SeleniumUtils.findElements(driver,
>>> "buttons:next", true);
>>> -
>>> +
>>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>>> -
>>> +
>>>                 Thread.sleep(2000L);
>>> -
>>> -               List<WebElement> elements =
>>> SeleniumUtils.findElements(driver, "buttons:finish", true);
>>> -
>>> +
>>> +               List<WebElement> elements =
>>> SeleniumUtils.findElements(driver,
>>> +                               "buttons:finish", true);
>>> +
>>>                 elements.get(1).sendKeys(Keys.RETURN);
>>> -
>>> +
>>>                 long maxMilliSecondsWait = 120000;
>>> -
>>> +
>>>                 while (maxMilliSecondsWait > 0) {
>>> -
>>> -                       //check if installation is complete by searching
>>> for the link on the success page
>>> -                       WebElement enterApplicationLink =
>>> SeleniumUtils.findElement(driver,
>>> -
>>> "//a[contains(@href,'install')]", false);
>>> -
>>> +
>>> +                       // check if installation is complete by
>>> searching for the link on
>>> +                       // the success page
>>> +                       WebElement enterApplicationLink =
>>> SeleniumUtils.findElement(driver,
>>> +
>>> "//a[contains(@href,'install')]", false);
>>> +
>>>                         if (enterApplicationLink == null) {
>>> -                               System.out.println("Installation running
>>> - wait 3 more seconds and check again");
>>> -
>>> +                               System.out
>>> +                                               .println("Installation
>>> running - wait 3 more seconds and check again");
>>> +
>>>                                 Thread.sleep(3000L);
>>>                                 maxMilliSecondsWait -= 3000;
>>>                         } else {
>>>                                 maxMilliSecondsWait = 0;
>>> -
>>> +
>>>                                 enterApplicationLink.click();
>>> -
>>> +
>>>                                 return;
>>>                         }
>>>                 }
>>> -
>>> +
>>>                 throw new Exception("Timeout during installation");
>>>         }
>>>
>>>         @After
>>>         public void tearDown() throws Exception {
>>> -               if (doTearDownAfterTest) {
>>> +               if (getDoTearDownAfterTest()) {
>>>                         driver.close();
>>>                         driver.quit();
>>>                 }
>>>
>>> Modified:
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>>> URL:
>>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java?rev=1531463&r1=1531462&r2=1531463&view=diff
>>>
>>> ==============================================================================
>>> ---
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>>> (original)
>>> +++
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>>> Fri Oct 11 23:47:10 2013
>>> @@ -42,6 +42,9 @@ public class SeleniumUtils {
>>>                         String inputText) throws Exception {
>>>                 WebElement element = SeleniumUtils.findElement(driver,
>>> search, true);
>>>
>>> +               //clear text before adding input
>>> +               element.clear();
>>> +
>>>                 // Would make send to check if this element is really an
>>> input text
>>>                 element.sendKeys(inputText);
>>>         }
>>> @@ -120,9 +123,6 @@ public class SeleniumUtils {
>>>         private static List<WebElement> _findElement(WebDriver driver,
>>> String search) {
>>>                 for (By by : _getSearchArray(search)) {
>>>                         try {
>>> -
>>> -
>>> -
>>>                                 List<WebElement> elements =
>>> driver.findElements(by);
>>>                                 if (elements != null && elements.size()
>>> > 0) {
>>>                                         return elements;
>>>
>>> Added:
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>>> URL:
>>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java?rev=1531463&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>>> (added)
>>> +++
>>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>>> Fri Oct 11 23:47:10 2013
>>> @@ -0,0 +1,95 @@
>>> +/*
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License") +  you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + *   http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> + */
>>> +package org.apache.openmeetings.test.selenium;
>>> +
>>> +import java.util.Date;
>>> +
>>> +import org.junit.Test;
>>> +import org.openqa.selenium.WebElement;
>>> +
>>> +public class TestSignUp extends AbstractLoadTestDefaults {
>>> +
>>> +       String pass = "pass";
>>> +
>>> +       @Override
>>> +       public boolean getDoTearDownAfterTest() {
>>> +               return false;
>>> +       }
>>> +
>>> +       @Test
>>> +       public void testSignUp() throws Exception {
>>> +               driver.get(getBASE_URL());
>>> +
>>> +               String currentRandomCounter = "" + ((new
>>> Date().getTime())/1000);
>>> +               String userName = "seba" + currentRandomCounter;
>>> +               String email = "hans." + currentRandomCounter + "@
>>> openmeetings.apache.org";
>>> +
>>> +               super.testIsInstalledAndDoInstallation();
>>> +
>>> +               WebElement signUpButton =
>>> SeleniumUtils.findElement(driver,
>>> +                               "//button[span[contains(text(), 'Not a
>>> member')]]", true);
>>> +               signUpButton.click();
>>> +
>>> +               // ##################################
>>> +               // Test validation message for passwords to be identical
>>> +               // ##################################
>>> +               doSignUp("Hans","Muster", userName, "pw", "pw2", email);
>>> +
>>> +               //Find Error label-id 232 "Please enter two identical
>>> passwords"
>>> +               SeleniumUtils.findElement(driver,
>>> "//span[@class='feedbackPanelERROR'][contains(text(), '" + getString(232) +
>>> "')]", true);
>>> +
>>> +
>>> +               // ##################################
>>> +               // Sign up with user and sign in
>>> +               // ##################################
>>> +               doSignUp("Hans","Muster", userName, pass, pass, email);
>>> +
>>> +               //Login with user
>>> +               SeleniumUtils.inputText(driver, "login", userName);
>>> +               SeleniumUtils.inputText(driver, "pass", pass);
>>> +
>>> +               //click labelid 112 "Sign In"
>>> +               WebElement signInButton =
>>> SeleniumUtils.findElement(driver,
>>> +                               "//button[span[contains(text(), '" +
>>> getString(112) + "')]]", true);
>>> +               signInButton.click();
>>> +
>>> +               // check for some text in dashbaord, labelid 281, "Help
>>> and support"
>>> +               SeleniumUtils.elementExists(driver,
>>> +                               "//h3[contains(text(), '" +
>>> getString(281) + "')]", true);
>>> +
>>> +               // ##################################
>>> +               // Sign up with same user and check duplicate user
>>> message
>>> +               // ##################################
>>> +       }
>>> +
>>> +       private void doSignUp(String firstName, String lastName, String
>>> login, String password,
>>> +                                       String confirmPassword, String
>>> email) throws Exception {
>>> +
>>> +               SeleniumUtils.inputText(driver, "firstName", firstName);
>>> +               SeleniumUtils.inputText(driver, "lastName", lastName);
>>> +               SeleniumUtils.inputText(driver, "//div[contains(@id,
>>> 'register')]//input[@name='login']", login);
>>> +               SeleniumUtils.inputText(driver, "password", password);
>>> +               SeleniumUtils.inputText(driver, "confirmPassword",
>>> confirmPassword);
>>> +               SeleniumUtils.inputText(driver, "email", email);
>>> +
>>> +               WebElement submitButton =
>>> SeleniumUtils.findElement(driver,
>>> +                               "//button[span[contains(text(),
>>> 'Register')]]", true);
>>> +               submitButton.click();
>>> +       }
>>> +}
>>>
>>>
>>>
>>
>>
>> --
>> WBR
>> Maxim aka solomax
>>
>
>
>
> --
> Sebastian Wagner
> https://twitter.com/#!/dead_lock
> http://www.webbase-design.de
> http://www.wagner-sebastian.com
> seba.wagner@gmail.com
>



-- 
WBR
Maxim aka solomax

Re: svn commit: r1531463 - in /openmeetings/trunk/singlewebapp: ./ src/test/java/org/apache/openmeetings/test/selenium/

Posted by "seba.wagner@gmail.com" <se...@gmail.com>.
I did thought about it but I did not do it.
I don't want to extend that class because I don't want that the test will
load any default values.
The Selenium tests does use the web installer to install the defaults if it
detects that there is a need to import anything.

The only copy and paste line of code of those two classes is the
annotation. And that is it.
There is no other functionality in the AbstractOpenmeetingsSpringTest that
we would use in the Selenium tests.

I also don't know how it would behave if you have multiple "setUp" routines
in the tests that overwrite each other.

It might however make sense to create yet another base class and let both
abstract classes inherit the spring annotations from it.
That would be probably my preference if you want to get rid of those
duplicate annotations.

Sebastian


2013/10/12 Maxim Solodovnik <so...@gmail.com>

> Hello Sebastian,
>
> Is it OK if I'll change AbstractTestDefaults to extend
> AbstractOpenmeetingsSpringTest and remove unnecessary annotations?
> I would like to avoid copy/pasted code as much as possible :)
>
>
> On Sat, Oct 12, 2013 at 6:47 AM, <se...@apache.org> wrote:
>
>> Author: sebawagner
>> Date: Fri Oct 11 23:47:10 2013
>> New Revision: 1531463
>>
>> URL: http://svn.apache.org/r1531463
>> Log:
>> OPENMEETINGS-816 UI test to sign up, to be continued
>> Added cglib to .classpath as you need it to run JUnit from inside Eclipse
>>
>> Added:
>>
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
>>       - copied, changed from r1529278,
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
>>
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>> Removed:
>>
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
>> Modified:
>>     openmeetings/trunk/singlewebapp/.classpath
>>
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>>
>> Modified: openmeetings/trunk/singlewebapp/.classpath
>> URL:
>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/.classpath?rev=1531463&r1=1531462&r2=1531463&view=diff
>>
>> ==============================================================================
>> --- openmeetings/trunk/singlewebapp/.classpath (original)
>> +++ openmeetings/trunk/singlewebapp/.classpath Fri Oct 11 23:47:10 2013
>> @@ -1,23 +1,4 @@
>>  <?xml version="1.0" encoding="UTF-8"?>
>> -<!--
>> -  Licensed to the Apache Software Foundation (ASF) under one
>> -  or more contributor license agreements.  See the NOTICE file
>> -  distributed with this work for additional information
>> -  regarding copyright ownership.  The ASF licenses this file
>> -  to you under the Apache License, Version 2.0 (the
>> -  "License"); you may not use this file except in compliance
>> -  with the License.  You may obtain a copy of the License at
>> -
>> -      http://www.apache.org/licenses/LICENSE-2.0
>> -
>> -  Unless required by applicable law or agreed to in writing,
>> -  software distributed under the License is distributed on an
>> -  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> -  KIND, either express or implied.  See the License for the
>> -  specific language governing permissions and limitations
>> -  under the License.
>> -
>> --->
>>  <classpath>
>>         <classpathentry kind="src" path="src/axis/java"/>
>>         <classpathentry kind="src" path="src/db/java"/>
>> @@ -64,5 +45,6 @@
>>         <classpathentry kind="lib"
>> path="build/red5/server/dist/lib/ehcache-core-2.5.0.jar"/>
>>         <classpathentry kind="lib"
>> path="build/red5/server/dist/plugins/tomcat-embed-core-7.0.41.jar"/>
>>         <classpathentry kind="lib"
>> path="build/red5/server/dist/lib/bcprov-jdk15on-1.47.jar"/>
>> +       <classpathentry kind="lib"
>> path="build/red5/server/dist/lib/cglib-nodep-2.2.2.jar"/>
>>         <classpathentry kind="output" path="build/classes/eclipse"/>
>>  </classpath>
>>
>> Copied:
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
>> (from r1529278,
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java)
>> URL:
>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java?p2=openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java&p1=openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java&r1=1529278&r2=1531463&rev=1531463&view=diff
>>
>> ==============================================================================
>> ---
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSeleniumSmokeTest.java
>> (original)
>> +++
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/AbstractLoadTestDefaults.java
>> Fri Oct 11 23:47:10 2013
>> @@ -20,43 +20,107 @@ package org.apache.openmeetings.test.sel
>>
>>  import java.util.List;
>>
>> +import org.apache.openmeetings.db.dao.label.FieldLanguagesValuesDao;
>>  import org.junit.After;
>>  import org.junit.Before;
>> -import org.junit.Test;
>> +import org.junit.runner.RunWith;
>>  import org.openqa.selenium.Keys;
>>  import org.openqa.selenium.WebDriver;
>>  import org.openqa.selenium.WebElement;
>>  import org.openqa.selenium.firefox.FirefoxDriver;
>> +import org.openqa.selenium.firefox.FirefoxProfile;
>> +import org.springframework.beans.factory.annotation.Autowired;
>> +import org.springframework.test.context.ContextConfiguration;
>> +import org.springframework.test.context.TestExecutionListeners;
>> +import
>> org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
>> +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
>> +
>> +@RunWith(SpringJUnit4ClassRunner.class)
>> +@TestExecutionListeners({})
>> +@ContextConfiguration(locations={"classpath:openmeetings-applicationContext.xml"},
>> inheritLocations = true)
>> +public abstract class AbstractLoadTestDefaults extends
>> AbstractJUnit4SpringContextTests {
>> +
>> +       @Autowired
>> +       private FieldLanguagesValuesDao fieldLanguagesValuesDao;
>>
>> -public class TestSeleniumSmokeTest {
>> +       public WebDriver driver = null;
>> +
>> +       private String BASE_URL = "http://localhost:5080/openmeetings";
>> +       private String username = "swagner";
>> +       private String userpass = "qweqwe";
>> +       private String orgname = "seleniumtest";
>> +       private String email = "selenium@openmeetings.apache.org";
>> +       private String locale = "en-us";
>>
>> -       public static String BASE_URL = "
>> http://localhost:5080/openmeetings";
>> -       public static String username = "swagner";
>> -       public static String userpass = "qweqwe";
>> -       private static final String orgname = "seleniumtest";
>> -       private static final String email = "
>> selenium@openmeetings.apache.org";
>>
>> -       public WebDriver driver = null;
>> +       public String getBASE_URL() {
>> +               return BASE_URL;
>> +       }
>> +
>> +       public String getUsername() {
>> +               return username;
>> +       }
>> +
>> +       public String getUserpass() {
>> +               return userpass;
>> +       }
>> +
>> +       public String getOrgname() {
>> +               return orgname;
>> +       }
>> +
>> +       public String getEmail() {
>> +               return email;
>> +       }
>> +
>> +       public Long getLanguageId() {
>> +               return 1L;
>> +       }
>> +
>> +       public String getLocale() {
>> +               return locale;
>> +       }
>>
>>         // setting this to false can be handy if you run the test from
>> inside
>>         // Eclipse, the browser will not shut down after the test so you
>> can start
>>         // to diagnose the test issue
>>         public boolean doTearDownAfterTest = false;
>> +
>> +       public String getString(long id) {
>> +               return fieldLanguagesValuesDao.getString(id,
>> getLanguageId());
>> +       }
>> +
>> +       /**
>> +        * Make method overwrite possible to have custom behavior in tests
>> +        *
>> +        * @return
>> +        */
>> +       public boolean getDoTearDownAfterTest() {
>> +               return doTearDownAfterTest;
>> +       }
>>
>>         @Before
>>         public void setUp() {
>> -               driver = new FirefoxDriver();
>> +               FirefoxProfile profile = new FirefoxProfile();
>> +               profile.setPreference("intl.accept_languages",
>> getLocale());
>> +               driver = new FirefoxDriver(profile);
>>         }
>>
>> -       @Test
>> +       /**
>> +        * This test is a basic test to verify the default loader
>> mechanism works
>> +        * it is not intend to be a part of any sub test
>> +        *
>> +        * @throws Exception
>> +        */
>> +       //@Test
>>         public void smokeTest() throws Exception {
>>                 try {
>> -                       driver.get(BASE_URL);
>> -
>> -                       testWebSite();
>> -
>> -                       SeleniumUtils.inputText(driver, "login",
>> username);
>> -                       SeleniumUtils.inputText(driver, "pass", userpass);
>> +                       driver.get(getBASE_URL());
>> +
>> +                       testIsInstalledAndDoInstallation();
>> +
>> +                       SeleniumUtils.inputText(driver, "login",
>> getUsername());
>> +                       SeleniumUtils.inputText(driver, "pass",
>> getUserpass());
>>
>>                         WebElement signInButton =
>> SeleniumUtils.findElement(driver,
>>                                         "//button[span[contains(text(),
>> 'Sign in')]]", true);
>> @@ -71,90 +135,101 @@ public class TestSeleniumSmokeTest {
>>                 }
>>         }
>>
>> -       private void testWebSite() throws Exception {
>> -
>> -               WebElement wicketExtensionsWizardHeaderTitle =
>> SeleniumUtils.findElement(driver,
>> -                               "wicketExtensionsWizardHeaderTitle",
>> false);
>> +       /**
>> +        * Throws exception in case that test fails, so it is important
>> to not catch
>> +        * that exception but really let the test fail!
>> +        *
>> +        * @throws Exception
>> +        */
>> +       protected void testIsInstalledAndDoInstallation() throws
>> Exception {
>> +
>> +               WebElement wicketExtensionsWizardHeaderTitle =
>> SeleniumUtils
>> +                               .findElement(driver,
>> "wicketExtensionsWizardHeaderTitle", false);
>>                 if (wicketExtensionsWizardHeaderTitle == null) {
>>                         return;
>>                 }
>> -               if
>> (wicketExtensionsWizardHeaderTitle.getText().contains("Installation")) {
>> +               if (wicketExtensionsWizardHeaderTitle.getText()
>> +                               .contains("Installation")) {
>>                         System.out.println("Do Installation");
>>                         doInstallation();
>>                 }
>> -
>> +
>>         }
>> -
>> +
>>         private void doInstallation() throws Exception {
>>                 Thread.sleep(3000L);
>> -
>> -               List<WebElement> buttons_next =
>> SeleniumUtils.findElements(driver, "buttons:next", true);
>> -
>> +
>> +               List<WebElement> buttons_next =
>> SeleniumUtils.findElements(driver,
>> +                               "buttons:next", true);
>> +
>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>> -
>> +
>>                 Thread.sleep(1000L);
>> -
>> -               SeleniumUtils.inputText(driver, "view:cfg.username",
>> username);
>> -               SeleniumUtils.inputText(driver, "view:cfg.password",
>> userpass);
>> -               SeleniumUtils.inputText(driver, "view:cfg.email", email);
>> -               SeleniumUtils.inputText(driver, "view:cfg.group",
>> orgname);
>> -
>> +
>> +               SeleniumUtils.inputText(driver, "view:cfg.username",
>> getUsername());
>> +               SeleniumUtils.inputText(driver, "view:cfg.password",
>> getUserpass());
>> +               SeleniumUtils.inputText(driver, "view:cfg.email",
>> getEmail());
>> +               SeleniumUtils.inputText(driver, "view:cfg.group",
>> getOrgname());
>> +
>>                 buttons_next = SeleniumUtils.findElements(driver,
>> "buttons:next", true);
>> -
>> +
>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>> -
>> +
>>                 Thread.sleep(1000L);
>> -
>> +
>>                 buttons_next = SeleniumUtils.findElements(driver,
>> "buttons:next", true);
>> -
>> +
>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>> -
>> +
>>                 Thread.sleep(1000L);
>> -
>> +
>>                 buttons_next = SeleniumUtils.findElements(driver,
>> "buttons:next", true);
>> -
>> +
>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>> -
>> +
>>                 Thread.sleep(1000L);
>> -
>> +
>>                 buttons_next = SeleniumUtils.findElements(driver,
>> "buttons:next", true);
>> -
>> +
>>                 buttons_next.get(1).sendKeys(Keys.RETURN);
>> -
>> +
>>                 Thread.sleep(2000L);
>> -
>> -               List<WebElement> elements =
>> SeleniumUtils.findElements(driver, "buttons:finish", true);
>> -
>> +
>> +               List<WebElement> elements =
>> SeleniumUtils.findElements(driver,
>> +                               "buttons:finish", true);
>> +
>>                 elements.get(1).sendKeys(Keys.RETURN);
>> -
>> +
>>                 long maxMilliSecondsWait = 120000;
>> -
>> +
>>                 while (maxMilliSecondsWait > 0) {
>> -
>> -                       //check if installation is complete by searching
>> for the link on the success page
>> -                       WebElement enterApplicationLink =
>> SeleniumUtils.findElement(driver,
>> -
>> "//a[contains(@href,'install')]", false);
>> -
>> +
>> +                       // check if installation is complete by searching
>> for the link on
>> +                       // the success page
>> +                       WebElement enterApplicationLink =
>> SeleniumUtils.findElement(driver,
>> +                                       "//a[contains(@href,'install')]",
>> false);
>> +
>>                         if (enterApplicationLink == null) {
>> -                               System.out.println("Installation running
>> - wait 3 more seconds and check again");
>> -
>> +                               System.out
>> +                                               .println("Installation
>> running - wait 3 more seconds and check again");
>> +
>>                                 Thread.sleep(3000L);
>>                                 maxMilliSecondsWait -= 3000;
>>                         } else {
>>                                 maxMilliSecondsWait = 0;
>> -
>> +
>>                                 enterApplicationLink.click();
>> -
>> +
>>                                 return;
>>                         }
>>                 }
>> -
>> +
>>                 throw new Exception("Timeout during installation");
>>         }
>>
>>         @After
>>         public void tearDown() throws Exception {
>> -               if (doTearDownAfterTest) {
>> +               if (getDoTearDownAfterTest()) {
>>                         driver.close();
>>                         driver.quit();
>>                 }
>>
>> Modified:
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>> URL:
>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java?rev=1531463&r1=1531462&r2=1531463&view=diff
>>
>> ==============================================================================
>> ---
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>> (original)
>> +++
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
>> Fri Oct 11 23:47:10 2013
>> @@ -42,6 +42,9 @@ public class SeleniumUtils {
>>                         String inputText) throws Exception {
>>                 WebElement element = SeleniumUtils.findElement(driver,
>> search, true);
>>
>> +               //clear text before adding input
>> +               element.clear();
>> +
>>                 // Would make send to check if this element is really an
>> input text
>>                 element.sendKeys(inputText);
>>         }
>> @@ -120,9 +123,6 @@ public class SeleniumUtils {
>>         private static List<WebElement> _findElement(WebDriver driver,
>> String search) {
>>                 for (By by : _getSearchArray(search)) {
>>                         try {
>> -
>> -
>> -
>>                                 List<WebElement> elements =
>> driver.findElements(by);
>>                                 if (elements != null && elements.size() >
>> 0) {
>>                                         return elements;
>>
>> Added:
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>> URL:
>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java?rev=1531463&view=auto
>>
>> ==============================================================================
>> ---
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>> (added)
>> +++
>> openmeetings/trunk/singlewebapp/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
>> Fri Oct 11 23:47:10 2013
>> @@ -0,0 +1,95 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one
>> + * or more contributor license agreements.  See the NOTICE file
>> + * distributed with this work for additional information
>> + * regarding copyright ownership.  The ASF licenses this file
>> + * to you under the Apache License, Version 2.0 (the
>> + * "License") +  you may not use this file except in compliance
>> + * with the License.  You may obtain a copy of the License at
>> + *
>> + *   http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,
>> + * software distributed under the License is distributed on an
>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> + * KIND, either express or implied.  See the License for the
>> + * specific language governing permissions and limitations
>> + * under the License.
>> + */
>> +package org.apache.openmeetings.test.selenium;
>> +
>> +import java.util.Date;
>> +
>> +import org.junit.Test;
>> +import org.openqa.selenium.WebElement;
>> +
>> +public class TestSignUp extends AbstractLoadTestDefaults {
>> +
>> +       String pass = "pass";
>> +
>> +       @Override
>> +       public boolean getDoTearDownAfterTest() {
>> +               return false;
>> +       }
>> +
>> +       @Test
>> +       public void testSignUp() throws Exception {
>> +               driver.get(getBASE_URL());
>> +
>> +               String currentRandomCounter = "" + ((new
>> Date().getTime())/1000);
>> +               String userName = "seba" + currentRandomCounter;
>> +               String email = "hans." + currentRandomCounter + "@
>> openmeetings.apache.org";
>> +
>> +               super.testIsInstalledAndDoInstallation();
>> +
>> +               WebElement signUpButton =
>> SeleniumUtils.findElement(driver,
>> +                               "//button[span[contains(text(), 'Not a
>> member')]]", true);
>> +               signUpButton.click();
>> +
>> +               // ##################################
>> +               // Test validation message for passwords to be identical
>> +               // ##################################
>> +               doSignUp("Hans","Muster", userName, "pw", "pw2", email);
>> +
>> +               //Find Error label-id 232 "Please enter two identical
>> passwords"
>> +               SeleniumUtils.findElement(driver,
>> "//span[@class='feedbackPanelERROR'][contains(text(), '" + getString(232) +
>> "')]", true);
>> +
>> +
>> +               // ##################################
>> +               // Sign up with user and sign in
>> +               // ##################################
>> +               doSignUp("Hans","Muster", userName, pass, pass, email);
>> +
>> +               //Login with user
>> +               SeleniumUtils.inputText(driver, "login", userName);
>> +               SeleniumUtils.inputText(driver, "pass", pass);
>> +
>> +               //click labelid 112 "Sign In"
>> +               WebElement signInButton =
>> SeleniumUtils.findElement(driver,
>> +                               "//button[span[contains(text(), '" +
>> getString(112) + "')]]", true);
>> +               signInButton.click();
>> +
>> +               // check for some text in dashbaord, labelid 281, "Help
>> and support"
>> +               SeleniumUtils.elementExists(driver,
>> +                               "//h3[contains(text(), '" +
>> getString(281) + "')]", true);
>> +
>> +               // ##################################
>> +               // Sign up with same user and check duplicate user message
>> +               // ##################################
>> +       }
>> +
>> +       private void doSignUp(String firstName, String lastName, String
>> login, String password,
>> +                                       String confirmPassword, String
>> email) throws Exception {
>> +
>> +               SeleniumUtils.inputText(driver, "firstName", firstName);
>> +               SeleniumUtils.inputText(driver, "lastName", lastName);
>> +               SeleniumUtils.inputText(driver, "//div[contains(@id,
>> 'register')]//input[@name='login']", login);
>> +               SeleniumUtils.inputText(driver, "password", password);
>> +               SeleniumUtils.inputText(driver, "confirmPassword",
>> confirmPassword);
>> +               SeleniumUtils.inputText(driver, "email", email);
>> +
>> +               WebElement submitButton =
>> SeleniumUtils.findElement(driver,
>> +                               "//button[span[contains(text(),
>> 'Register')]]", true);
>> +               submitButton.click();
>> +       }
>> +}
>>
>>
>>
>
>
> --
> WBR
> Maxim aka solomax
>



-- 
Sebastian Wagner
https://twitter.com/#!/dead_lock
http://www.webbase-design.de
http://www.wagner-sebastian.com
seba.wagner@gmail.com