aboutsummaryrefslogtreecommitdiffstats
path: root/testbench-api/src/main/java/com/vaadin/testbench/elements/AbstractSplitPanelElement.java
blob: 93c136ecb3ac0ac759ba3729176185aa0fb19a3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
 * Copyright 2000-2018 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.List;

import org.openqa.selenium.WebElement;

import com.vaadin.testbench.By;
import com.vaadin.testbench.TestBench;
import com.vaadin.testbench.elementsbase.AbstractElement;
import com.vaadin.testbench.elementsbase.ServerClass;

@ServerClass("com.vaadin.ui.AbstractSplitPanel")
public class AbstractSplitPanelElement
        extends AbstractComponentContainerElement {

    private static org.openqa.selenium.By byFirstContainer = By
            .xpath("./div/div[contains(normalize-space(concat(@class, ' ')), "
                    + "normalize-space('-first-container '))]/*");
    private static org.openqa.selenium.By bySecondContainer = By
            .xpath("./div/div[contains(normalize-space(concat(@class, ' ')), "
                    + "normalize-space('-second-container '))]/*");

    /**
     * Gets the first component of a split panel and wraps it in given class.
     *
     * @param clazz
     *            Components element class
     * @return First component wrapped in given class
     */
    public <T extends AbstractElement> T getFirstComponent(Class<T> clazz) {
        return getContainedComponent(clazz, byFirstContainer);
    }

    /**
     * Gets the second component of a split panel and wraps it in given class.
     *
     * @param clazz
     *            Components element class
     * @return Second component wrapped in given class
     */
    public <T extends AbstractElement> T getSecondComponent(Class<T> clazz) {
        return getContainedComponent(clazz, bySecondContainer);
    }

    /**
     * Gets a component of a split panel and wraps it in the given class.
     *
     * @param clazz
     *            Components element class
     * @param byContainer
     *            A locator that specifies the container (first or second) whose
     *            component is looked for
     * @return A component wrapped in the given class
     */
    private <T extends AbstractElement> T getContainedComponent(Class<T> clazz,
            org.openqa.selenium.By byContainer) {
        List<AbstractComponentElement> containedComponents = $$(
                AbstractComponentElement.class).all();
        List<WebElement> componentsInSelectedContainer = findElements(
                byContainer);
        for (AbstractComponentElement component : containedComponents) {
            WebElement elem = component.getWrappedElement();
            if (componentsInSelectedContainer.contains(elem)) {
                return TestBench.createElement(clazz, elem,
                        getCommandExecutor());
            }
        }
        return null;
    }

}