/** * <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.course; import java.util.List; import org.junit.Assert; import org.olat.selenium.page.graphene.OOGraphene; import org.olat.selenium.page.group.GroupPage; import org.olat.selenium.page.group.GroupsPage; import org.olat.selenium.page.group.MembersWizardPage; import org.olat.user.restapi.UserVO; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; /** * * Drive the members management page in course * * * Initial date: 12.02.2015<br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ public class MembersPage { private final WebDriver browser; public MembersPage(WebDriver browser) { this.browser = browser; } public MembersWizardPage addMember() { By addMemberBy = By.className("o_sel_course_add_member"); browser.findElement(addMemberBy).click(); OOGraphene.waitBusy(browser); return new MembersWizardPage(browser); } public MembersWizardPage importMembers() { By importMembersBy = By.className("o_sel_course_import_members"); browser.findElement(importMembersBy).click(); OOGraphene.waitBusy(browser); return new MembersWizardPage(browser); } public MembersPage selectBusinessGroups() { By groupsItemBy = By.cssSelector("li.o_sel_membersmgt_groups a"); browser.findElement(groupsItemBy).click(); OOGraphene.waitBusy(browser); By groupTitleby = By.cssSelector("h4 i.o_icon.o_icon_group"); OOGraphene.waitElement(groupTitleby, 5, browser); return this; } public MembersPage selectMembers() { By groupsItemBy = By.cssSelector("li.o_sel_membersmgt_members a"); browser.findElement(groupsItemBy).click(); OOGraphene.waitBusy(browser); By groupTitleby = By.cssSelector("h4 i.o_icon.o_icon_group"); OOGraphene.waitElement(groupTitleby, 5, browser); return this; } public GroupPage selectBusinessGroup(String name) { return new GroupsPage(browser).selectGroup(name); } public MembersPage createBusinessGroup(String name, String description, int maxParticipants, boolean waitingList, boolean auto) { By createBy = By.className("o_sel_course_new_group"); browser.findElement(createBy).click(); OOGraphene.waitBusy(browser); By popupBy = By.cssSelector("div.modal-content fieldset.o_sel_group_edit_group_form"); OOGraphene.waitElement(popupBy, 5, browser); //fill the form By nameBy = By.cssSelector(".o_sel_group_edit_title input[type='text']"); browser.findElement(nameBy).sendKeys(name); OOGraphene.tinymce(description, browser); if(maxParticipants > 0) { By maxParticipantBy = By.cssSelector(".o_sel_group_edit_max_members input[type='text']"); browser.findElement(maxParticipantBy).sendKeys(Integer.toString(maxParticipants)); } if(waitingList) { By waitingListBy = By.cssSelector(".o_sel_group_edit_waiting_list input[type='checkbox']"); browser.findElement(waitingListBy).click(); OOGraphene.waitBusy(browser); } if(auto) { By autoBy = By.cssSelector(".o_sel_group_edit_auto_close_ranks input[type='checkbox']"); browser.findElement(autoBy).click(); OOGraphene.waitBusy(browser); } //save By submitBy = By.cssSelector(".o_sel_group_edit_group_form button.btn-primary"); WebElement submitButton = browser.findElement(submitBy); submitButton.click(); OOGraphene.waitBusy(browser); return this; } /** * Add a user by username as participant * * @param user */ public void quickAdd(UserVO user) { addMember() .searchMember(user, true) .next().next().next().finish(); } /** * Check if the user with the specified first name is in the member list. * @param user * @return */ public MembersPage assertFirstNameInList(UserVO user) { By firstNameBy = By.xpath("//td//a[contains(text(),'" + user.getFirstName() + "')]"); By rowBy = By.cssSelector(".o_sel_member_list table.table tr"); List<WebElement> rows = browser.findElements(rowBy); boolean found = false; for(WebElement row:rows) { List<WebElement> firstNameEl = row.findElements(firstNameBy); if(firstNameEl.size() > 0) { found = true; break; } } Assert.assertTrue(found); return this; } /** * Click back to the course * * @return */ public CoursePageFragment clickToolbarBack() { OOGraphene.closeBlueMessageWindow(browser); By toolbarBackBy = By.cssSelector("li.o_breadcrumb_back>a"); browser.findElement(toolbarBackBy).click(); OOGraphene.waitBusy(browser); return new CoursePageFragment(browser); } }