diff --git a/src/main/java/org/olat/course/editor/NodeConfigFormController.java b/src/main/java/org/olat/course/editor/NodeConfigFormController.java index 3dfe32ae5acc4df0c14c676f79c9d8abd5750d3d..5642b518bcd505a198419b983bfbdbdcf41adff2 100644 --- a/src/main/java/org/olat/course/editor/NodeConfigFormController.java +++ b/src/main/java/org/olat/course/editor/NodeConfigFormController.java @@ -140,11 +140,13 @@ public class NodeConfigFormController extends FormBasicController { protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { // add the short title text input element shortTitle = uifactory.addTextElement("nodeConfigForm.menutitle", "nodeConfigForm.menutitle", SHORT_TITLE_MAX_LENGTH, (menuTitle == null ? "": menuTitle), formLayout); + shortTitle.setElementCssClass("o_sel_node_editor_shorttitle"); shortTitle.setMandatory(true); shortTitle.setCheckVisibleLength(true); // add the title input text element title = uifactory.addTextElement("nodeConfigForm.displaytitle", "nodeConfigForm.displaytitle", 255, (displayTitle==null? "": displayTitle), formLayout); + title.setElementCssClass("o_sel_node_editor_title"); // add the learning objectives rich text input element objectives = uifactory.addRichTextElementForStringData("nodeConfigForm.learningobjectives", "nodeConfigForm.learningobjectives", (learningObjectives==null?"":learningObjectives), 10, -1, false, null, null, formLayout, ureq.getUserSession(), getWindowControl()); diff --git a/src/test/java/org/olat/selenium/CourseTest.java b/src/test/java/org/olat/selenium/CourseTest.java index 470ab828b52d71425f82c814c98007e91ce032fa..700f7e7690d66070882e84376909d9cd0745ca52 100644 --- a/src/test/java/org/olat/selenium/CourseTest.java +++ b/src/test/java/org/olat/selenium/CourseTest.java @@ -168,7 +168,7 @@ public class CourseTest { .nodeTitle("CP-1") .selectTabLearnContent() .chooseCP(cpTitle); - + //publish the course courseEditor .publish() diff --git a/src/test/java/org/olat/selenium/page/LoginPage.java b/src/test/java/org/olat/selenium/page/LoginPage.java index 23287e0b776ca37406adf1e42a9715b631d2de39..aa98db823ec87bb2879d6624dc15e392149490a5 100644 --- a/src/test/java/org/olat/selenium/page/LoginPage.java +++ b/src/test/java/org/olat/selenium/page/LoginPage.java @@ -26,6 +26,7 @@ import org.jboss.arquillian.drone.api.annotation.Drone; import org.jboss.arquillian.graphene.Graphene; import org.jboss.arquillian.graphene.page.Location; import org.jcodec.common.Assert; +import org.olat.selenium.page.graphene.OOGraphene; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; diff --git a/src/test/java/org/olat/selenium/page/NavigationPage.java b/src/test/java/org/olat/selenium/page/NavigationPage.java index 0ac8c3253224a429f929b0ad52b562ee2b6ca744..4ab69c2524870850df4d15bd9a82780e6cb8a94a 100644 --- a/src/test/java/org/olat/selenium/page/NavigationPage.java +++ b/src/test/java/org/olat/selenium/page/NavigationPage.java @@ -24,6 +24,7 @@ import java.util.List; import org.jboss.arquillian.drone.api.annotation.Drone; import org.jboss.arquillian.graphene.Graphene; import org.junit.Assert; +import org.olat.selenium.page.graphene.OOGraphene; import org.olat.selenium.page.repository.AuthoringEnvPage; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; @@ -68,6 +69,7 @@ public class NavigationPage { OOGraphene.waitBusy(); backToTheTop(); + OOGraphene.closeBlueMessageWindow(browser); WebElement main = browser.findElement(By.id("o_main")); return Graphene.createPageFragment(AuthoringEnvPage.class, main); @@ -79,6 +81,7 @@ public class NavigationPage { courseLink.click(); OOGraphene.waitBusy(); + OOGraphene.closeBlueMessageWindow(browser); } public NavigationPage backToTheTop() { @@ -92,7 +95,8 @@ public class NavigationPage { Assert.assertTrue(count++ < 3); } - + + OOGraphene.closeBlueMessageWindow(browser); return this; } } diff --git a/src/test/java/org/olat/selenium/page/core/MenuTreePageFragment.java b/src/test/java/org/olat/selenium/page/core/MenuTreePageFragment.java index 1d3198918c0619acce1858f196a1ff69cf0e456a..210d5126316103edad0fbeca805104594fd094c3 100644 --- a/src/test/java/org/olat/selenium/page/core/MenuTreePageFragment.java +++ b/src/test/java/org/olat/selenium/page/core/MenuTreePageFragment.java @@ -22,7 +22,7 @@ package org.olat.selenium.page.core; import java.util.List; import org.junit.Assert; -import org.olat.selenium.page.OOGraphene; +import org.olat.selenium.page.graphene.OOGraphene; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; diff --git a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java index eab28613172b2340d294852485e36dbadcaaf804..d993fe9b9d6fcebad8c73386191bb82358245513 100644 --- a/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java +++ b/src/test/java/org/olat/selenium/page/course/CourseEditorPageFragment.java @@ -25,7 +25,7 @@ import java.util.List; import org.jboss.arquillian.drone.api.annotation.Drone; import org.jboss.arquillian.graphene.Graphene; import org.jcodec.common.Assert; -import org.olat.selenium.page.OOGraphene; +import org.olat.selenium.page.graphene.OOGraphene; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; diff --git a/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java b/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java index 5f76bbeab9ff05a1471d934307f4940712c5ea44..5a6f0626571e31eed361beb52fb7e4bd0070ae65 100644 --- a/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java +++ b/src/test/java/org/olat/selenium/page/course/CoursePageFragment.java @@ -26,8 +26,8 @@ import org.jboss.arquillian.graphene.Graphene; import org.jboss.arquillian.graphene.fragment.Root; import org.junit.Assert; import org.olat.restapi.support.vo.CourseVO; -import org.olat.selenium.page.OOGraphene; import org.olat.selenium.page.core.MenuTreePageFragment; +import org.olat.selenium.page.graphene.OOGraphene; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; @@ -55,8 +55,6 @@ public class CoursePageFragment { @FindBy(id="o_main_left_content") private WebElement treeContainer; - - public static CoursePageFragment getCourse(WebDriver browser, URL deploymentUrl, CourseVO course) { browser.navigate().to(deploymentUrl.toExternalForm() + "url/RepositoryEntry/" + course.getRepoEntryKey()); OOGraphene.waitElement(courseRun); @@ -75,27 +73,39 @@ public class CoursePageFragment { return this; } + /** + * Click the first element of the menu tree + * @return + */ public CoursePageFragment clickTree() { MenuTreePageFragment menuTree = Graphene.createPageFragment(MenuTreePageFragment.class, treeContainer); menuTree.selectRoot(); return this; } + /** + * Open the tools drop-down + * @return + */ public CoursePageFragment openToolsMenu() { browser.findElement(toolsMenuCaret).click(); OOGraphene.waitElement(toolsMenu); return this; } + /** + * Click the editor link in the tools drop-down + * @return + */ public CourseEditorPageFragment edit() { if(!browser.findElement(toolsMenu).isDisplayed()) { openToolsMenu(); } browser.findElement(editCourseBy).click(); OOGraphene.waitBusy(); + OOGraphene.closeBlueMessageWindow(browser); WebElement main = browser.findElement(By.id("o_main")); return Graphene.createPageFragment(CourseEditorPageFragment.class, main); } - } diff --git a/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java b/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java index d20377c09ea34bced49abe4fe3a9ae8b52784c3c..1715fa842807ecb50cf0c64e01b06f3c762aaa86 100644 --- a/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java +++ b/src/test/java/org/olat/selenium/page/course/PublisherPageFragment.java @@ -21,7 +21,7 @@ package org.olat.selenium.page.course; import org.jboss.arquillian.drone.api.annotation.Drone; import org.jcodec.common.Assert; -import org.olat.selenium.page.OOGraphene; +import org.olat.selenium.page.graphene.OOGraphene; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; @@ -71,6 +71,7 @@ public class PublisherPageFragment { Assert.assertTrue(next.isEnabled()); next.click(); OOGraphene.waitBusy(); + OOGraphene.closeBlueMessageWindow(browser); return this; } @@ -80,6 +81,7 @@ public class PublisherPageFragment { Assert.assertTrue(finish.isEnabled()); finish.click(); OOGraphene.waitBusy(); + OOGraphene.closeBlueMessageWindow(browser); return this; } diff --git a/src/test/java/org/olat/selenium/page/BusyPredicate.java b/src/test/java/org/olat/selenium/page/graphene/BusyPredicate.java similarity index 97% rename from src/test/java/org/olat/selenium/page/BusyPredicate.java rename to src/test/java/org/olat/selenium/page/graphene/BusyPredicate.java index bce4862b95e962f05e27781472ec5990d835068b..a5339fdccddd536aa092faba64ea80f9d89175b9 100644 --- a/src/test/java/org/olat/selenium/page/BusyPredicate.java +++ b/src/test/java/org/olat/selenium/page/graphene/BusyPredicate.java @@ -17,7 +17,7 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.selenium.page; +package org.olat.selenium.page.graphene; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; diff --git a/src/test/java/org/olat/selenium/page/graphene/CloseAlertInfoPredicate.java b/src/test/java/org/olat/selenium/page/graphene/CloseAlertInfoPredicate.java new file mode 100644 index 0000000000000000000000000000000000000000..96612f51c32e3ba132030c67475a5cbdd1cd289f --- /dev/null +++ b/src/test/java/org/olat/selenium/page/graphene/CloseAlertInfoPredicate.java @@ -0,0 +1,47 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.selenium.page.graphene; + +import java.util.List; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +import com.google.common.base.Predicate; + +/** + * + * Predicate which test if the alert disappear + * + * Initial date: 20.06.2014<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class CloseAlertInfoPredicate implements Predicate<WebDriver> { + + private static final By alertBy = By.cssSelector("div.o_alert_info"); + + @Override + public boolean apply(WebDriver driver) { + List<WebElement> closeButtons = driver.findElements(alertBy); + return closeButtons.isEmpty(); + } +} diff --git a/src/test/java/org/olat/selenium/page/OOGraphene.java b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java similarity index 60% rename from src/test/java/org/olat/selenium/page/OOGraphene.java rename to src/test/java/org/olat/selenium/page/graphene/OOGraphene.java index 5571848714f62aabbf518bf2ad91576ada964f69..945ed1b500d59a9f0f272572282eae34920a0f20 100644 --- a/src/test/java/org/olat/selenium/page/OOGraphene.java +++ b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java @@ -17,12 +17,16 @@ * frentix GmbH, http://www.frentix.com * <p> */ -package org.olat.selenium.page; +package org.olat.selenium.page.graphene; +import java.util.List; import java.util.concurrent.TimeUnit; import org.jboss.arquillian.graphene.Graphene; import org.openqa.selenium.By; +import org.openqa.selenium.ElementNotVisibleException; +import org.openqa.selenium.TimeoutException; +import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; /** @@ -32,7 +36,7 @@ import org.openqa.selenium.WebElement; * */ public class OOGraphene { - + private static final long poolingDuration = 25; public static void waitBusy() { @@ -46,5 +50,34 @@ public class OOGraphene { public static void waitElement(WebElement element) { Graphene.waitModel().pollingEvery(poolingDuration, TimeUnit.MILLISECONDS).until().element(element).is().visible(); } - + + public static final void closeBlueMessageWindow(WebDriver browser) { + By closeButtonBy = By.cssSelector("div.o_alert_info div.o_sel_info_message i.o_icon.o_icon_close"); + List<WebElement> closeButtons = browser.findElements(closeButtonBy); + for(WebElement closeButton:closeButtons) { + if(closeButton.isDisplayed()) { + try { + clickCloseButton(closeButton); + } catch (TimeoutException e) { + try { + clickCloseButton(closeButton); + } catch(Exception e2) { + // + } + } + } + } + } + + private static final void clickCloseButton(WebElement closeButton) { + try { + closeButton.click(); + Graphene.waitModel() + .withTimeout(1000, TimeUnit.MILLISECONDS) + .pollingEvery(poolingDuration, TimeUnit.MILLISECONDS) + .until(new CloseAlertInfoPredicate()); + } catch (ElementNotVisibleException e) { + //e.printStackTrace(); + } + } } diff --git a/src/test/java/org/olat/selenium/page/repository/AuthoringEnvPage.java b/src/test/java/org/olat/selenium/page/repository/AuthoringEnvPage.java index 565240a2188016847e1f665dfeb0e96abcc2f3de..f07599f4b6625a94cfc735d3c3d546190911ab09 100644 --- a/src/test/java/org/olat/selenium/page/repository/AuthoringEnvPage.java +++ b/src/test/java/org/olat/selenium/page/repository/AuthoringEnvPage.java @@ -22,7 +22,7 @@ package org.olat.selenium.page.repository; import org.jboss.arquillian.drone.api.annotation.Drone; import org.jboss.arquillian.graphene.Graphene; import org.jcodec.common.Assert; -import org.olat.selenium.page.OOGraphene; +import org.olat.selenium.page.graphene.OOGraphene; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; diff --git a/src/test/java/org/olat/selenium/page/repository/RepositoryDetailsPage.java b/src/test/java/org/olat/selenium/page/repository/RepositoryDetailsPage.java index 940b42edb6c7a4a5dccc3b3ff7347bf930452a9d..062977cd06f8d157af79394820eb0248a57db010 100644 --- a/src/test/java/org/olat/selenium/page/repository/RepositoryDetailsPage.java +++ b/src/test/java/org/olat/selenium/page/repository/RepositoryDetailsPage.java @@ -23,7 +23,7 @@ import java.util.List; import org.jboss.arquillian.drone.api.annotation.Drone; import org.jcodec.common.Assert; -import org.olat.selenium.page.OOGraphene; +import org.olat.selenium.page.graphene.OOGraphene; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; @@ -59,11 +59,13 @@ public class RepositoryDetailsPage { public void launch() { browser.findElement(launchBy).click(); OOGraphene.waitBusy(); + OOGraphene.closeBlueMessageWindow(browser); } public void edit() { browser.findElement(editBy).click(); OOGraphene.waitBusy(); + OOGraphene.closeBlueMessageWindow(browser); } } diff --git a/src/test/java/org/olat/selenium/page/repository/RepositoryEditDescriptionPage.java b/src/test/java/org/olat/selenium/page/repository/RepositoryEditDescriptionPage.java index 377fbada3ac9719b10594e4051490d455787c38d..690131c4687a1609e9e64505647508e51f1c1543 100644 --- a/src/test/java/org/olat/selenium/page/repository/RepositoryEditDescriptionPage.java +++ b/src/test/java/org/olat/selenium/page/repository/RepositoryEditDescriptionPage.java @@ -23,7 +23,7 @@ import org.jboss.arquillian.drone.api.annotation.Drone; import org.jboss.arquillian.graphene.Graphene; import org.jcodec.common.Assert; import org.olat.selenium.page.NavigationPage; -import org.olat.selenium.page.OOGraphene; +import org.olat.selenium.page.graphene.OOGraphene; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; diff --git a/src/test/java/org/olat/selenium/page/user/UserPreferencesPageFragment.java b/src/test/java/org/olat/selenium/page/user/UserPreferencesPageFragment.java index 498bde3de6930ebb6e58ec5a8051faff18aca0c7..9fc2f7f2b24d0d5d02b71f2c6a4607acdca4e416 100644 --- a/src/test/java/org/olat/selenium/page/user/UserPreferencesPageFragment.java +++ b/src/test/java/org/olat/selenium/page/user/UserPreferencesPageFragment.java @@ -21,7 +21,7 @@ package org.olat.selenium.page.user; import org.jboss.arquillian.drone.api.annotation.Drone; import org.jcodec.common.Assert; -import org.olat.selenium.page.OOGraphene; +import org.olat.selenium.page.graphene.OOGraphene; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; diff --git a/src/test/java/org/olat/selenium/page/user/UserSettingsPage.java b/src/test/java/org/olat/selenium/page/user/UserSettingsPage.java index 50faee6818c7d51f4d8b4e8657e3c5c700015009..7a7a8a0344c9d93e1f2e0636e49d0c41d33221d7 100644 --- a/src/test/java/org/olat/selenium/page/user/UserSettingsPage.java +++ b/src/test/java/org/olat/selenium/page/user/UserSettingsPage.java @@ -22,7 +22,7 @@ package org.olat.selenium.page.user; import org.jboss.arquillian.drone.api.annotation.Drone; import org.jboss.arquillian.graphene.Graphene; import org.jcodec.common.Assert; -import org.olat.selenium.page.OOGraphene; +import org.olat.selenium.page.graphene.OOGraphene; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; diff --git a/src/test/java/org/olat/selenium/page/user/UserToolsPage.java b/src/test/java/org/olat/selenium/page/user/UserToolsPage.java index 7066100871563fd2c9f5bd68dd4ef5854c484ae0..aca0660badb0765bfde95597edcc3f6510b94389 100644 --- a/src/test/java/org/olat/selenium/page/user/UserToolsPage.java +++ b/src/test/java/org/olat/selenium/page/user/UserToolsPage.java @@ -24,7 +24,7 @@ import org.jboss.arquillian.graphene.Graphene; import org.jboss.arquillian.graphene.page.Page; import org.jcodec.common.Assert; import org.olat.selenium.page.LoginPage; -import org.olat.selenium.page.OOGraphene; +import org.olat.selenium.page.graphene.OOGraphene; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement;