/*
* Copyright 2000-2022 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 org.openqa.selenium.WebElement;
import com.vaadin.testbench.By;
import com.vaadin.testbench.commands.TestBenchElementCommands;
import com.vaadin.testbench.elementsbase.ServerClass;
@ServerClass("com.vaadin.ui.CheckBox")
public class CheckBoxElement extends AbstractFieldElement {
/**
* Return string representation of value of the checkbox Return either
* checked or unchecked.
*/
public String getValue() {
if (isChecked()) {
return "checked";
} else {
return "unchecked";
}
}
/**
* Checks if the checkbox is checked.
*
* @return true
if the checkbox is checked, false
* otherwise.
*/
public boolean isChecked() {
return getInputElement().isSelected();
}
/**
* Clears the check box, setting unchecked value. The check box is unchecked
* by sending a click event on it.
*
*/
@Override
public void clear() {
if (isChecked()) {
click();
}
}
@Override
public String getCaption() {
WebElement elem = findElement(By.xpath(".."))
.findElement(By.tagName("label"));
return elem.getText();
}
@Override
public void click() {
if (isReadOnly()) {
throw new ReadOnlyException();
}
WebElement input = getInputElement();
if (isFirefox()) {
// When using Valo, the input element is covered by a
// pseudo-element, which Firefox will complain about
getCommandExecutor().executeScript("arguments[0].click()", input);
} else if (isChrome()) {
((TestBenchElementCommands) (input)).click(0, 0);
} else {
input.click();
}
}
/**
* Gets the <input> element of the checkbox.
*
* @return the input element
*/
public WebElement getInputElement() {
return findElement(By.tagName("input"));
}
}