/**
* Copyright 2005-2016 Red Hat, Inc.
*
* Red Hat licenses this file to you 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 io.fabric8.selenium.inputs;
import io.fabric8.selenium.PageSupport;
import io.fabric8.selenium.WebDriverFacade;
import io.fabric8.utils.Millis;
import org.openqa.selenium.By;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebElement;
/**
* Stores the {@link By} and value of an input field for a form
*/
public class InputValue extends PageSupport {
private final By by;
private final String value;
public InputValue(WebDriverFacade facade, By by, String value) {
super(facade);
this.by = by;
this.value = value;
}
@Override
public String toString() {
return "InputValue{" +
"by=" + by +
", value='" + value + '\'' +
'}';
}
public By getBy() {
return by;
}
public String getValue() {
return value;
}
public WebElement doInput() {
WebElement element = getFacade().findOptionalElement(by);
if (element != null) {
for (int i = 0; i < 10; i++) {
try {
doInputOnElement(element);
return element;
} catch (StaleElementReferenceException e) {
logWarn("Caught: " + e);
getFacade().sleep(Millis.seconds(5));
}
}
logWarn("Failed to perform input on " + by + " to due repeated StaleElementReferenceException!");
}
return null;
}
protected void doInputOnElement(WebElement element) {
element.clear();
element.sendKeys(value);
}
}