/**
* Copyright 2015 ArcBees Inc.
*
* 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.arcbees.gaestudio.cucumber.page;
import java.util.List;
import javax.inject.Inject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import com.arcbees.gaestudio.client.debug.DebugIds;
import com.arcbees.gaestudio.selenium.WebDriverHelper;
import com.arcbees.test.ByDebugId;
import com.google.common.base.Predicate;
public class VisualizerPage {
private final WebDriverHelper webDriverHelper;
@Inject
VisualizerPage(WebDriverHelper webDriverHelper) {
this.webDriverHelper = webDriverHelper;
}
public void clickSaveButton() {
WebElement element = webDriverHelper.waitUntilElementIsClickable(ByDebugId.id(DebugIds.SAVE));
element.click();
}
public void changeCarString(String make, String newMake) {
WebElement editor = webDriverHelper.waitUntilPresenceOfElementLocated(ByDebugId.id(DebugIds.ENTITY_EDITOR));
WebElement makeTextBox = webDriverHelper.findChild(editor, By.xpath(".//input[@value='" + make + "']"));
webDriverHelper.typeInTextBox(makeTextBox, newMake);
}
public void changeCarBooleans() {
WebElement booleansContainer = webDriverHelper.waitUntilPresenceOfElementLocated(ByDebugId.id("booleans"));
List<WebElement> checkboxes = booleansContainer.findElements(By.className("checkbox"));
WebElement middleCheckbox = checkboxes.get(1);
webDriverHelper.waitUntilElementIsClickable(middleCheckbox);
middleCheckbox.click();
}
public void changeCarGeoPts() {
WebElement geoPtsContainer = webDriverHelper.waitUntilPresenceOfElementLocated(ByDebugId.id("geoPts"));
WebElement targetGeoPt = webDriverHelper.findChild(geoPtsContainer, ByDebugId.id("2"));
List<WebElement> textboxes = targetGeoPt.findElements(By.tagName("input"));
webDriverHelper.typeInTextBox(textboxes.get(0), "25.0");
webDriverHelper.typeInTextBox(textboxes.get(1), "50.0");
}
public void changeCarWheels() {
WebElement wheelsContainer = webDriverHelper.waitUntilPresenceOfElementLocated(ByDebugId.id("wheels"));
WebElement targetWheel = webDriverHelper.findChild(wheelsContainer, ByDebugId.id("0"));
WebElement textbox = targetWheel.findElement(By.tagName("input"));
webDriverHelper.typeInTextBox(textbox, "2.0");
}
public void clickOnEntityInTable() {
WebElement table = webDriverHelper.waitUntilPresenceOfElementLocated(ByDebugId.id(DebugIds.ENTITIES_TABLES));
WebElement row = webDriverHelper.findChild(table, By.xpath(".//tr[@__gwt_row='0']"));
row.click();
}
public void clickOnKind(final String kindToFind) {
final WebElement allKinds = webDriverHelper.waitUntilPresenceOfElementLocated(ByDebugId.id(DebugIds.KINDS));
webDriverHelper.webDriverWait().until(new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver input) {
return getKindWebElements(allKinds, kindToFind).size() == 1;
}
});
WebElement targetKind = getKindWebElements(allKinds, kindToFind).get(0);
targetKind.click();
}
public void clickEditButton() {
WebElement edit = webDriverHelper.waitUntilElementIsClickable(ByDebugId.id(DebugIds.EDIT));
edit.click();
}
public void changeCarMixedProperties(String aNewString) {
WebElement mixedPropertiesContainer =
webDriverHelper.waitUntilPresenceOfElementLocated(ByDebugId.id("mixedProperties"));
WebElement targetproperty = webDriverHelper.findChild(mixedPropertiesContainer, ByDebugId.id("1"));
WebElement textbox = targetproperty.findElement(By.tagName("input"));
webDriverHelper.typeInTextBox(textbox, aNewString);
}
public void clickDeleteButton() {
WebElement deleteButton = webDriverHelper.waitUntilElementIsClickable(ByDebugId.id(DebugIds.DELETE_ENGAGE));
deleteButton.click();
}
public void clickDeleteConfirmButton() {
WebElement deleteConfirmButton = webDriverHelper.waitUntilElementIsClickable(
ByDebugId.id(DebugIds.DELETE_CONFIRM));
deleteConfirmButton.click();
}
private List<WebElement> getKindWebElements(WebElement allKinds, String kindToFind) {
return allKinds.findElements(By.xpath("//span[text()='" + kindToFind + "']"));
}
}