123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- /*
- * Copyright 2000-2016 Vaadin Ltd.
- *
- * Licensed 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 com.vaadin.testbench.elements;
-
- import java.util.Arrays;
- import java.util.List;
- import java.util.stream.Collectors;
-
- import org.openqa.selenium.By;
- import org.openqa.selenium.NoSuchElementException;
- import org.openqa.selenium.WebElement;
-
- import com.vaadin.testbench.TestBenchElement;
- import com.vaadin.testbench.elementsbase.ServerClass;
-
- /**
- * Testbench Element API for {@code Tree}.
- * <p>
- * <strong>Note:</strong> This TreeElement is for the Vaadin 8 version of Tree.
- * Use {@link com.vaadin.v7.testbench.elements.TreeElement} for the
- * compatibility version.
- *
- * @author Vaadin Ltd.
- * @since 8.1
- */
- @ServerClass("com.vaadin.ui.Tree")
- public class TreeElement extends AbstractComponentElement {
-
- /**
- * Expands the row at the given index in the tree.
- *
- * @param index
- * 0-based row index to expand
- */
- public void expand(int index) {
- if (isExpanded(index)) {
- throw new IllegalStateException(
- "The element at row " + index + " was expanded already");
- }
- getExpandElement(index).click();
- }
-
- /**
- * Returns whether the row at the given index is expanded or not.
- *
- * @param index
- * 0-based row index
- * @return {@code true} if expanded, {@code false} if collapsed
- */
- public boolean isExpanded(int index) {
- WebElement expandElement = getExpandElement(index);
- List<String> classes = Arrays
- .asList(expandElement.getAttribute("class").split(" "));
- return classes.contains("expanded") && !classes.contains("collapsed");
- }
-
- /**
- * Returns whether the row at the given index is collapsed or not.
- *
- * @param rowIndex
- * 0-based row index
- *
- * @return {@code true} if collapsed, {@code false} if expanded
- */
- public boolean isCollapsed(int rowIndex) {
- return !isExpanded(rowIndex);
- }
-
- /**
- * Gets the expand/collapse element for the given row.
- *
- * @param rowIndex
- * 0-based row index
- * @return the {@code span} element that is clicked for expanding/collapsing
- * a row
- * @throws NoSuchElementException
- * if there is no expand element for this row
- */
- public WebElement getExpandElement(int rowIndex) {
- return asTreeGrid().getCell(rowIndex, 0)
- .findElement(By.className("v-tree8-expander"));
-
- }
-
- /**
- * Collapses the row at the given index in the tree.
- *
- * @param index
- * 0-based row index to collapse
- */
- public void collapse(int index) {
- if (isCollapsed(index)) {
- throw new IllegalStateException(
- "The element at row " + index + " was collapsed already");
- }
- getExpandElement(index).click();
- }
-
- /**
- * Gets all items currently shown in this tree. The returned element objects
- * are the rendered contents for each item.
- *
- * @return list of content elements for all items
- */
- public List<TestBenchElement> getAllItems() {
- return asTreeGrid().getBody().findElements(By.tagName("tr")).stream()
- .map(this::findCellContentFromRow).collect(Collectors.toList());
- }
-
- /**
- * Gets an item at given index. The returned element object is the rendered
- * content in the given index.
- *
- * @param index
- * 0-based row index
- * @return content element for item at given index
- */
- public TestBenchElement getItem(int index) {
- return findCellContentFromRow(asTreeGrid().getRow(index));
- }
-
- /**
- * Finds the rendered cell content from given row element. This expects the
- * row to contain only a single column rendered with TreeRenderer.
- *
- * @param rowElement
- * the row element
- * @return cell content element
- */
- protected TestBenchElement findCellContentFromRow(WebElement rowElement) {
- return TestBenchElement.wrapElement(
- rowElement.findElement(By.className("gwt-HTML")),
- getCommandExecutor());
- }
-
- /**
- * Convenience method for accessing the underlying TreeGrid.
- *
- * @return this tree element as a tree grid element.
- */
- protected TreeGridElement asTreeGrid() {
- return wrap(TreeGridElement.class);
- }
- }
|